如何在Json.NET中尽可能快地检索大文件中的一些值?

时间:2014-11-15 16:03:18

标签: c# .net json json.net

我需要显示一个Json文件列表。每个文件都包含一个非常大的对象,需要一段时间才能序列化。总之,当我只想显示它们的列表时,序列化每个对象的性能损失花费了太多时间。该文件看起来像这样:

{
    'Name': 'File Name',
    'Version': '1.6',
    'BigLongToSerializeObject': {/* The big object here */}
}

如何在Json.NET中尽可能高效地从此文件中检索NameVersion

2 个答案:

答案 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;对象