When I deserialize my jsonstring ,I am getting error message
There was an error deserializing the object of type RecordInfo. End element 'Warning' from namespace '' expected. Found element 'item' from namespace ''.
This is my JsonString
public const string jsonString = @"
{
""RequestId"":514106,
""Warning"":[],
""CustomerData"": {
""Email"":""[email protected]"",
""FullName"":""OrTguOfE"",
""OrderData"":[]
}
}";
Data contracts
[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; }
}
}
This is the Deserializer I use
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);
}
}
When I deserialize the bove jsonstring ,I am getting error message
There was an error deserializing the object of type RecordInfo. End element 'Warning' from namespace '' expected. Found element 'item' from namespace ''.
Any suggestions to resolve this error?
Set IsRequired = false
, e.g.:
[DataMember(Name = "RequestId", IsRequired = false)]
MSDN Source: DataMemberAttribute.IsRequired
Property
Gets or sets a value that instructs the serialization engine that the member must be present when reading or deserializing.
Another reason I found for the similar error is when we map an array type of Json field to a non array field of the data contract class. (e.g.) my JSON data was like -
"ipAddress": [
"10.61.255.25",
"fe80:0000:0000:0000:10e1:0b66:96a6:9ac8"
]
But because I was unaware of this type of IPAddress
data, I was mapping ipaddress
to
[DataMember(Name="ipAddress")]
public string IPAddress ( get; set; }
Instead, it should be
[DataMember(Name="ipAddress")]
public string[] IPAddress ( get; set; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With