我正在创建一个带有原始数据类型的嵌套自定义类型。 我有一个Web APi,它返回JSON中的数据。 使用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对所有属性都有空值。
有什么建议吗?
答案 0 :(得分:0)
你有几个错误。
您返回元素集合并尝试反序列化一个元素而不是集合
public IEnumerable<SampleData> 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"
}
}
};
}
所以你只需将代码更改为
var serializer = new DataContractJsonSerializer(typeof(List<RootObject>));
var deserializedObj= (List<RootObject>)serializer.ReadObject(ms);
您在服务端和客户端之间有不同的型号名称,只有您的SampleData
型号,一切都会很好。您必须将MyNestedType1
重命名为NestedTypeObject1
或将名称添加到DataContractAttribute
,例如:
[DataContract(Name = "NestedTypeObject1")]
public class MyNestedType1
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string BD { get; set; }
[DataMember]
public string UD { get; set; }
}
它也属于属性名称。