首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用C#中的流读取器高效地反序列化带有嵌套对象的JSON对象?

如何使用C#中的流读取器高效地反序列化带有嵌套对象的JSON对象?
EN

Stack Overflow用户
提问于 2013-01-22 00:22:24
回答 1查看 1.7K关注 0票数 2

我想高效地反序列化JSON对象,它包含JSON对象的嵌套数组。

例如,JSON目录列表可以包含一个根JSON文件系统对象,该对象具有文件系统对象的递归数组。

代码语言:javascript
代码运行次数:0
运行
复制
{
    "bytes": 0,
    "path": "/Public",
    "is_dir": true,
    "contents": [
        {
            "bytes": 0,
            "modified": "Mon, 18 Jul 2011 20:13:43 +0000",
            "path": "/Public/1.txt",
            "is_dir": false
        },
        {
            "bytes": 0,
            "modified": "Mon, 18 Jul 2011 20:13:43 +0000",
            "path": "/Public/2.txt",
            "is_dir": false
        }
    ]
}

相应的C#类如下所示

代码语言:javascript
代码运行次数:0
运行
复制
class JsonFileInfo
{
    public string Path;
    public long Bytes;
    public string Modified;
    public bool IsDir;
    public List<JsonFileInfo> Contents;
}

我已经试过.NET DataContractJsonSerializer了。

代码语言:javascript
代码运行次数:0
运行
复制
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(RainstormFileInfo));
JsonFileInfo jfi = (JsonFileInfo)serializer.ReadObject(responseStream);

我也尝试过JSON.NET JsonSerializer + JsonTextReader。

代码语言:javascript
代码运行次数:0
运行
复制
JsonReader reader = new JsonTextReader(new StreamReader(responseStream))
JsonSerializer serializer = new JsonSerializer();
JsonFileInfo jfi = serializer.Deserialize<JsonFileInfo>(reader);

但是这两个框架在反序列化的一举中将整个contents JSON子数组读入内存。

如何从流中一次读取一个JsonFileInfo对象的JSON结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 00:35:36

现在有一个库可以完全满足您的需求。它将一次读取一个字节的JSON并返回结果。完整的描述和用法示例here

它可能会让你避免重复发明轮子。

从本质上讲,这个库允许您解析完整的JSON对象,或者面向嵌套对象。无论是哪种情况,它都是一种非常有效的解析JSON的方法,而且比JSON.NET更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14442885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档