Как десериализовать строку json в объект домена? - PullRequest
3 голосов
/ 04 января 2012

Я пытаюсь преобразовать следующий 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 ]

2 голосов
/ 04 января 2012

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

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

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

1 голос
/ 04 января 2012

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

[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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...