2012-01-04 19 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; 
    } 

私はSystem.Runtime.Serialization.Json名前空間にあると明らかに存在しDataContractJsonSerializerを試してみました文字列をオブジェクトに変換する方法はありません。私はこれを行うことを可能にする他の図書館はありますか?または、このライブラリを使用してこれを行う方法があります(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

ビットモデルを変更してください:

[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

関連する問題