C# 使用JSON.NET解析JSON对象流的正确方法是什么?
我有一个JSON对象流,看起来有点像这样:C# 使用JSON.NET解析JSON对象流的正确方法是什么?,c#,json.net,C#,Json.net,我有一个JSON对象流,看起来有点像这样: {...}{...}{...}{...}... 因此基本上是一个JSON对象的串联列表,没有任何分隔符。 使用JSON.NET将这些反序列化为IEnumerable的正确方法是什么?那一刻,我尝试了类似的方法 var serializer = new JsonSerializer(); serializer.CheckAdditionalContent = false; using (var reader = new StreamReader(st
{...}{...}{...}{...}...
因此基本上是一个JSON对象的串联列表,没有任何分隔符。
使用JSON.NET将这些反序列化为IEnumerable
的正确方法是什么?那一刻,我尝试了类似的方法
var serializer = new JsonSerializer();
serializer.CheckAdditionalContent = false;
using (var reader = new StreamReader(stream))
using (var jsonReader = new JsonTextReader(reader)) {
reader.SupportMultipleContent = true;
reader.Read();
while (reader.TokenType != JsonToken.None) {
yield return serializer.Deserialize<TResult>(reader);
}
}
显然,我需要在
反序列化
调用后移动读卡器,但我该如何做呢?我认为如果您稍微改变一下循环,一切都应该正常:
public IEnumerable<TResult> ReadJson<TResult>(Stream stream)
{
var serializer = new JsonSerializer();
using (var reader = new StreamReader(stream))
using (var jsonReader = new JsonTextReader(reader))
{
jsonReader.SupportMultipleContent = true;
while (jsonReader.Read())
{
yield return serializer.Deserialize<TResult>(jsonReader);
}
}
}
示例:
JsonNet站点上的示例:谢谢,我以前试过,但在你的小提琴演奏之后,我检查了我的JSON流,发现它并不像预期的那样(用逗号分隔,而不是没有分隔符)。所以这确实是正确的答案,我只需要修复JSON流。SupportMultipleContent做什么?文档没有意义-多个json内容意味着什么?@AmbroseLeung:我相信它告诉
JsonTextReader
文档中存在多个json片段。这个问题提到单个对象流({}{}{}
),这就是为什么这个属性是必需的。
public IEnumerable<TResult> ReadJson<TResult>(Stream stream)
{
var serializer = new JsonSerializer();
using (var reader = new StreamReader(stream))
using (var jsonReader = new JsonTextReader(reader))
{
jsonReader.SupportMultipleContent = true;
while (jsonReader.Read())
{
yield return serializer.Deserialize<TResult>(jsonReader);
}
}
}
using (var stream = /* some stream */)
{
IEnumerable<MyClass> result = ReadJson<MyClass>(stream);
foreach (var item in result)
{
Console.WriteLine(item.MyProperty);
}
}