栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C#中解析JSON

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在C#中解析JSON

[更新]
我刚刚意识到了为什么您没有收到结果……

Deserialize
方法中缺少一行。您忘记了将结果分配给您的
obj

public static T Deserialize<T>(string json){    using (MemoryStream ms = new MemoryStream(Encoding.Unipre.GetBytes(json)))    {        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));        return (T)serializer.ReadObject(ms);    } }

另外,以下

Serialize
方法仅供参考:

public static string Serialize<T>(T obj){    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());    using (MemoryStream ms = new MemoryStream())    {        serializer.WriteObject(ms, obj);        return Encoding.Default.GetString(ms.ToArray());    }}

编辑

如果要使用Json.NET,则这里是与上面的代码等效的Serialize / Deserialize方法。

反序列化:

JsonConvert.DeserializeObject<T>(string json);

连载:

JsonConvert.SerializeObject(object o);

这已经是Json.NET的一部分,因此您可以在JsonConvert类上调用它们。

链接:
使用Json.NET序列化和反序列化JSON


现在,获得StackOverflow的原因是由于

Properties

以这个为例:

[DataMember]public string unescapedUrl{    get { return unescapedUrl; } // <= this line is causing a Stack Overflow    set { this.unescapedUrl = value; }}

请注意,在中

getter
,您将返回实际的属性(即,属性的getter反复调用自身),因此您将创建无限递归。


属性(在2.0中)应定义如下:

string _unescapedUrl; // <= private field[DataMember]public string unescapedUrl{    get { return _unescapedUrl; }     set { _unescapedUrl = value; }}

您有一个私有字段,然后在getter中返回该字段的值,然后在setter中设置该字段的值。


顺便说一句,如果您使用的是3.5 framework,则可以这样做并避免使用后备字段,而让编译器来处理:

public string unescapedUrl { get; set;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号