我需要显示一个Json文件列表。每个文件都包含一个非常大的对象,需要一段时间才能序列化。总之,当我只想显示它们的列表时,序列化每个对象的性能损失花费了太多时间。该文件看起来像这样:
{
'Name': 'File Name',
'Version': '1.6',
'BigLongToSerializeObject': {/* The big object here */}
}
如何在Json.NET中尽可能高效地从此文件中检索Name
和Version
?
答案 0 :(得分:0)
您可以通过自定义ContractResolver自定义反序列化。
创建合约解析程序
class ListContractResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(
Type type,
MemberSerialization memberSerialization)
{
var result = base.CreateProperties(type, memberSerialization);
if(/*type is your type*/)
result = result.Where(i=>i.PropertyName != "BigLongToSerializeObject")
.ToList();
return result;
}
}
然后为列表反序列化创建序列化器
var listSerializer = new JsonSerializer();
serializer.ContractResolver = new ListContractResolver ();
然后您可以使用listSerializer
反序列化列表并使用默认序列化程序正常反序列化。
答案 1 :(得分:0)
JSON# has a very lightweight tool,可以让你实现这一目标。它将从更大的JSON对象中检索嵌入的JSON:
const string schoolMetadata = @"{ "school": {...";
var jsonParser = new JsonObjectParser();
using (var stream =
new MemoryStream(Encoding.UTF8.GetBytes(schoolMetadata))) {
Json.Parse(_jsonParser, stream, "teachers");
}
在这里,我们检索一个&#34;老师&#34;来自更大的学校&#34;对象