2012-01-04 3 views
3

Я пытаюсь преобразовать следующий json в объект домена.Как десериализовать строку json для объекта домена?

JSON:

[{"name":"McDonalds","deals":[{"desc":"Onion Rings free with Double Cheese burgers"}],"geometry":{"lat":13.073412,"lng":80.221393}},{"name":"JusSportz","deals":[{"desc":"20% off on Wilson Rackets"}],"geometry":{"lat":13.073231,"lng":80.221181}}] 

Модель:

[DataContract] 
    public class Deal 
    { 
     [DataMember(Name="name")] 
     public string Store { get; set; } 

     [DataMember(Name="deals")] 
     public Offer[] Offers {get; set;} 

     [DataMember(Name="geometry")] 
     public GeoCoordinate Location { get; set; } 

    } 

    [DataContract] 
    public class Offer 
    { 
     [DataMember] 
     public string deal; 
    } 

Я попытался DataContractJsonSerializer, который находится в пространстве имен System.Runtime.Serialization.Json и там, по-видимому невозможно преобразовать строку в объект. Есть ли другие библиотеки, которые позволяют мне это сделать? Или есть способ сделать это с помощью этой библиотеки (путем преобразования строки Json в некоторый промежуточный формат.)?

ответ

2

Вот как я десериализации JSON вернуться к своим объектам домена.

using (var reader = new MemoryStream(Encoding.Unicode.GetBytes("YourStringValue"))) 
{ 
    var ser = new DataContractJsonSerializer(typeof(Deal)); 
    return (Deal)ser.ReadObject(reader); 
} 

Это то, что вы искали?

+0

Я так думаю, я также думаю, что я мог бы преобразовывать массив сделок, пока (неправильно) отбрасывал его на Сделку. Я получаю недопустимое исключение. Попробуйте его и примите его, если его работа – gprasant

+0

Убедитесь, что все ваши классы, которые вы десериализуете, чтобы иметь атрибуты контракта с данными. Если нет, вы можете столкнуться с дополнительными проблемами сериализации. –

1

Попробуйте изменить немного Model:

[DataContract] 
public class Deal 
{ 
    [DataMember(Name="name")] 
    public string Store { get; set; } 

    [DataMember(Name="deals")] 
    public Offer[] Offers {get; set;} 

    [DataMember(Name="geometry")] 
    public GeoCoordinate Location { get; set; } 

} 

[DataContract] 
public class Offer 
{ 
    [DataMember(Name="desc")] 
    public string deal { get; set; } 
} 
+0

Я не думаю, что это проблема с моделью. Я думаю, что он показывает им преобразование/разбор JSON. – gprasant

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