如何使用DataContractJsonSerializer来解析嵌套的json对象?

我有一个像这样的json文本:

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

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

 public static T Deserialize(string json) { var instance = Activator.CreateInstance(); 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(jsonText); IttPackage package = Deserialize(response.token); 

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

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

所以,我认为,我不能使用System.Web.HelpersSystem.Web.Script.Serialization来解析。

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

(编辑:我不完全确定是否允许受保护的设置者)

 [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); 

您可以将IttPackage包含在IttPackage对象中,这样您只需解析一次json。 此外,我不认为你可以使用protected modifier作为属性的set方法,所以尝试删除它。

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