gpt4 book ai didi

c# - 如何使用 DataContractJsonSerializer 解析嵌套的 json 对象?

转载 作者:太空狗 更新时间:2023-10-30 00:51:29 24 4
gpt4 key购买 nike

我有一个这样的 json 文本:

{
"response":200,
"result":
{
"package":
{
"token":"aaa"
}
}
}

我正在使用 DataContractJsonSerializer 从上面的 json 中提取信息。

public static T Deserialize<T>(string json)
{
var instance = Activator.CreateInstance<T>();
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
var serializer = new DataContractJsonSerializer(instance.GetType());
return (T)serializer.ReadObject(ms);
}
}

我对类的描述如下:

[DataContract]
class IttResponse
{
[DataMember(Name = "response")]
public int Response { get; protected set; }

[DataMember(Name = "result")]
public string Result { get; protected set; }
}

[DataContract]
public class IttPackage
{

[DataMember(Name = "token")]
public string Token { get; set; }
}

现在,我尝试按如下方式解析 json 文本:

IttResponse response = Deserialize<IttResponse>(jsonText);
IttPackage package = Deserialize<IttPackage>(response.token);

但是,在第一行解析 jsonText 时总是出错。

注意:我正在开发一个在桌面上运行的应用程序,使用 C#、VS Ultimate 2013、.Net Framework 4.5 编写

所以,我想,我不能使用System.Web.Helpers,或者System.Web.Script.Serialization来解析。

最佳答案

序列化引擎理解复杂类型。一种 DataContract 类型引用另一种 DataContract 类型是安全的。

(编辑:我不完全确定是否允许 protected setter)

[DataContract]
class IttResponse
{
[DataMember(Name = "response")]
public int Response { get; protected set; }

[DataMember(Name = "result")]
public IttResult Result { get; protected set; }
}

[DataContract]
public class IttResult
{
[DataMember(Name = "package")]
public IttPackage Package { get; set; }
}

[DataContract]
public class IttPackage
{
[DataMember(Name = "token")]
public string Token { get; set; }
}

用法和以前一样

IttResponse response = Deserialize(jsonText);

关于c# - 如何使用 DataContractJsonSerializer 解析嵌套的 json 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com