8

当我反序列化我的 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 ''.

有什么建议可以解决这个错误吗?

4

2 回答 2

6

设置IsRequired = false,例如:

[DataMember(Name = "RequestId", IsRequired = false)]

MSDN 来源DataMemberAttribute.IsRequired财产

获取或设置一个值,该值指示序列化引擎在读取或反序列化时该成员必须存在。

于 2013-04-05T19:39:31.440 回答
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; }
于 2016-07-02T04:20:43.467 回答