如何在 Json.NET 尽快检索大文件中的几个值
本文关键字:几个 文件 Json NET 检索 | 更新日期: 2023-09-27 18:30:33
我需要显示一个 Json 文件列表。每个文件都包含一个相当大的对象,需要一段时间才能序列化。总的来说,当我只想显示每个对象的列表时,序列化每个对象的性能影响需要太多时间。该文件看起来有点像这样:
{
'Name': 'File Name',
'Version': '1.6',
'BigLongToSerializeObject': {/* The big object here */}
}
如何在 Json.NET 中尽可能高效地仅从此文件中检索Name
和Version
?
您可以通过自定义协定解析程序自定义反序列化。
创建协定解析程序
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
对列表进行反序列化,并使用默认序列化程序正常反序列化。
JSON# 有一个非常轻量级的工具,可以让你实现这一点。它将从较大的 JSON 对象中检索嵌入的 JSON:
const string schoolMetadata = @"{ "school": {...";
var jsonParser = new JsonObjectParser();
using (var stream =
new MemoryStream(Encoding.UTF8.GetBytes(schoolMetadata))) {
Json.Parse(_jsonParser, stream, "teachers");
}
在这里,我们从一个更大的"学校"对象中检索一个"教师"对象。