当我反序列化我的jsonstring时,我收到错误消息
There was an error deserializing the object of type RecordInfo. End element 'Warning' from namespace '' expected. Found element 'item' from namespace ''.
这是我的JsonString
public const string jsonString = @"
{
""RequestId"":514106,
""Warning"":[],
""CustomerData"": {
""Email"":""abc@abc.com"",
""FullName"":""OrTguOfE"",
""OrderData"":[]
}
}";
数据合同
[DataContract]
public class RecordInfo
{
[DataMember(Name = "RequestId")]
public string RequestId { get; set; }
[DataMember(Name = "Warning")]
public string Warning { get; set; }
[DataMember(Name = "CustomerData")]
public CustomerData CustomerData { get; set; }
}
[DataContract]
public class CustomerData
{
[DataMember(Name = "Email")]
public string RequestId { get; set; }
[DataMember(Name = "FullName")]
public string FullName { get; set; }
[DataMember(Name = "OrderData")]
public OrderData[] OrderData { get; set; }
}
[DataContract]
public class OrderData
{
[DataMember(Name = "OrderId")]
public string OrderId { get; set; }
[DataMember(Name = "SourceId")]
public string SourceId { get; set; }
[DataMember(Name = "SourceData")]
public SourceData[] SourceData { get; set; }
}
[DataContract]
public class SourceData
{
[DataMember(Name = "SourceDescription")]
public string SourceDescription { get; set; }
[DataMember(Name = "ProductName")]
public string ProductName { get; set; }
}
}
这是我使用的解串器
private static T Deserialize<T>(string jsonString)
{
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
{
var serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}
当我反序列化bove jsonstring时,我收到错误消息
There was an error deserializing the object of type RecordInfo. End element 'Warning' from namespace '' expected. Found element 'item' from namespace ''.
有任何解决此错误的建议吗?
答案 0 :(得分:5)
设置IsRequired = false
,例如:
[DataMember(Name = "RequestId", IsRequired = false)]
MSDN来源:DataMemberAttribute.IsRequired
Property
获取或设置一个值,该值指示序列化引擎 成员必须在阅读或反序列化时在场。
答案 1 :(得分:2)
我发现类似错误的另一个原因是我们将数组类型的Json字段映射到数据协定类的非数组字段。 (例如)我的JSON数据就像 -
"ipAddress": [
"10.61.255.25",
"fe80:0000:0000:0000:10e1:0b66:96a6:9ac8"
]
但是因为我不知道这种IPAddress
数据,所以我将ipaddress
映射到
[DataMember(Name="ipAddress")]
public string IPAddress ( get; set; }
相反,它应该是
[DataMember(Name="ipAddress")]
public string[] IPAddress ( get; set; }