2013-03-24 3 views
1

Я пытаюсь десериализации моей JsonStringJsonString Десериализация Ошибка

string JsonString= "{\"RequestId\":1308,\"Warning\":[\"WARNING_NoOrdersForCustomer\"],\"Customer\":{\"__type\":\"CustomerOrder:#Data\",\"Email\":\"[email protected]\",\"FullName\":\"Anke White\",\"Phone\":\"\",\"Orders\":[]}}" 

Вот мое datacontracts

[DataContract] 
     public class SalesInfo 
     { 
      [DataMember(Name = "RequestId")] 
      public string RequestId { get; set; } 

      [DataMember(Name = "Warning")] 
      public string[] Warning { get; set; } 

      [DataMember(Name = "Customer")] 
      public Customer CustomerData { get; set; } 

     } 

[DataContract] 
    public class Customer 
     { 
      [DataMember(Name = "Email")] 
      public string Email { get; set; } 

      [DataMember(Name = "FullName")] 
      public string FullName { get; set; } 

      [DataMember(Name = "Phone")] 
      public string Phone { get; set; } 

      [DataMember(Name = "Orders")] 
      public string[] Orders { get; set; } 


     } 

я пытался с этим

SalesInfo sales = Deserialize<SalesInfo>(JsonString); 

вот Deserialize

private static T Deserialize<T>(string json) 
{ 
    var instance = Activator.CreateInstance<T>(); 
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
    { 
     var serializer = new DataContractJsonSerializer(instance.GetType()); 
     return (T)serializer.ReadObject(ms); 
    } 
} 

Но я получаю сообщение об ошибке

Element ':Customer' contains data from a type that maps to the name 'http://schemas.datacontract.org/2004/07/Data:CustomerOrder'. The deserializer has no knowledge of any type that maps to this name. Consider using a DataContractResolver or add the type corresponding to 'CustomerOrder' to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding it to the list of known types passed to DataContractSerializer. 

Пожалуйста, помогите мне решить эту ошибку и десериализации JsonString

+0

Вместо этого вы рассматривали использование 'System.Web.Script.Serialization.JavaScriptSerializer'? Легче использовать ИМО. То же самое относится к библиотеке Json.NET: http://json.codeplex.com/ – Simeon

+0

Возьмите loo на этом сайте здесь, если вы хотите бесплатную онлайн-проверку 'JSON Validation' http://jsonlint.com/ – MethodMan

ответ

1

Потому что ваш JsonString неправилен:

\ "Клиент \": {\ "__ типа \ ": \" CustomerOrder: #Data \ ", \" Em ...

И нет никакой информации о типе CustomerOrder.

Право JsonString в вашем случае:

{\ "RequestID \": 1308 \ "Внимание \": [\ "WARNING_NoOrdersForCustomer \"], \ "Клиент \": {\ "E-mail \ ": \" [email protected] \ ", \" FullName \ ": \" Anke White \ ", \" Phone \ ": \" \ ", \" Orders \ ": []}}

enter image description here

0

Похоже, вы используете собственный формат MS Ajax в формате JSON, который вставляет эти «__type» вещи, которые не совместимы ни с чем другим.

Итак, проверьте сериализованную часть вашего решения.

Смежные вопросы