【发布时间】:2016-02-16 06:54:32
【问题描述】:
我正在使用原始数据类型创建嵌套自定义类型。 我有一个以 JSON 格式返回数据的 Web APi。 使用 json2csharp.com,我正在生成相同的类。
我用 DataMember 修饰了所有类中的原始数据类型,用 DataContract 修饰了类型。
我正在使用以下代码进行反序列化:
var resp = httpClient.GetAsync("http://ACTUAL_API_URI").Result;
var res = await resp.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
byte[] byteArr= Encoding.ASCII.GetBytes(res);
var ms = new MemoryStream(byteArr);
var deserializedObj= (RootObject)serializer.ReadObject(ms);
我没有遇到任何异常。但是 deserializedObj 的所有属性都有空值。
有什么建议吗?
【问题讨论】:
-
你能提供api url吗?我猜你的
RootObject班级有问题 -
请找出使用的类型: [DataContract] public class MyNestedType1 { [DataMember] public int Id { get;放; } [DataMember] 公共字符串 BD { 获取;放; }[DataMember] 公共字符串 UD { 获取;放; } } [DataContract] public class MyNestedType2 { [DataMember] public string Date { get;放; }[DataMember] 公共字符串 U1 { 获取;放; } [DataMember] 公共字符串 D1 { 获取;放; } } [DataContract] public class RootObject{[DataMember] public int Value { get;放; }[DataMember] public MyNestedType1 ObjectType1 { get;放; }[DataMember] public MyNestedType2 ObjectType2 { get;放; } }
-
另外,创建了一个简单的服务和合约如下:
-
[DataContract] public class NestedType1{ [DataMember] public int ID { get;放; } [DataMember] 公共字符串 BD { 获取;放; } [DataMember] 公共字符串 UD { 获取;放; }}[DataContract] public class NestedType2 {[DataMember] public string Date { get;放; } [DataMember] 公共字符串 S1 { 获取;放; } [DataMember] 公共字符串 S2 { 获取;放; }}[DataContract] public class SampleData{ [DataMember] public int Value { get;set; } [DataMember] public NestedType1 NestedTypeObject1 { get;set; }[DataMember] public NestedType2 NestedTypeObject2 { get;设置;}}
-
服务如下: public IEnumerable
Get() { return new SampleData[] { new SampleData() { Value=100, NestedTypeObject1 = new NestedType1 () { ID=101, BD=" Description#1", UD="Description#2" }, NestedTypeObject2 = new NestedType2 () { Date=DateTime.Now.ToString(), S1="S1 String", S2="S2 String" } } }; }
标签: json win-universal-app datacontractjsonserializer