我有这样的json
{
"name": "somenameofevent",
"type": "event",
"data": {
"object": {
"age": "18",
"petName": "18"
},
"desct": {
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有2个像这样的对象
public class CustEvent
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("type")]
public string EventType{ get; set; }
[JsonProperty("data")]
public SomeData Data{ get; set; }
}
public class SomeData
{
[JsonProperty("object")]
public String SomeObject { get; set;}
[JsonProperty("dsct")]
public String SomeDesct { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我用来解析json对象Newtonsoft.NET库.以及如何将RAW JSON转换为SomeObject,SomeDesct属性?在JSON中,"data.object ..."是复杂的对象,我想只获得RAW JSON String到这些属性.你能帮助我吗 ?
可能重复:
C#中的增量JSON解析
以下问题是相关的,但不解决(至少直接)我正在尝试解决的问题:
我试图使用Json.NET反序列化可能非常大的JSON数据.JObject.Parse(JsonFullString)我希望通过令牌从流令牌中读取并构造对象图,而不是将整个文件加载到内存中并使用解析JSON .我将不胜感激任何关于如何从流实现反序列化的建议.
注意:我的意图是用更好的实现替换以下代码
string jsonData = string.Empty;
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
jsonData = ASCIIEncoding.ASCII.GetString(ms.ToArray());
}
JObject jObject = JObject.Parse(jsonData);
var entities = from e in jObject.Root
select e;
我有一个Json,其中包含一个存储base64编码字符串的数据字段.这个Json被序列化并发送给客户端.
在客户端,newtonsoft json.net反序列化器用于返回Json.但是,如果数据字段变大(~400 MB),则解串器将抛出内存不足异常:数组维度超出支持的范围.我还在Task-Manager中看到,内存消耗确实快速增长.
任何想法为什么会这样?是否有json字段的最大大小?
代码示例(简化):
HttpResponseMessage responseTemp = null;
responseTemp = client.PostAsJsonAsync(client.BaseAddress, message).Result;
string jsonContent = responseTemp.Content.ReadAsStringAsync.Result;
result = JsonConvert.DeserializeObject<Result>(jsonContent);
Run Code Online (Sandbox Code Playgroud)
结果类:
public class Result
{
public string Message { get; set; }
public byte[] Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
更新:
我认为我的问题不是序列化程序,而只是试图在内存中处理这么大的字符串.在我将字符串读入内存时,应用程序的内存消耗会爆炸.该字符串上的每个操作都是相同的.目前,我认为我必须找到一种方法来处理流并立即停止将所有内容读入内存.