2017-06-12 11 views
1

私は箱から出して、このタイプにシリアライズ可能なタイプとJSON文字列があります。カスタム型にJSON辞書をデシリアライズする方法

public class MyVar 
{ 
    public string Content { get; set; } 
    public string Type { get; set; } 
} 

public class TypeA 
{ 
    public string Name { get; set; } 
    public Dictionary<string, MyVar> Vars { get; set; } 
} 

はに同じJSON文字列をデシリアライズすることは可能ですが辞書をラップするカスタムタイプですか?

public class MyVars 
{ 
    private IDictionary<string, MyVar> _vars; 

    public MyVar this[string key] 
    { 
     get { ... } 
     set { ... } 
    } 
    ... 
} 

public class TypeA 
{ 
    public string Name { get; set; } 
    public MyVars Vars { get; set; } 
} 
+1

? http://www.newtonsoft.com/json/help/html/SerializingJSON.htm JsonConvert.DeserializeObject (出力); –

+0

新しいラッピングクラスを導入したのと同じJson文字列ではありません。シリアライザを使用して新しいjson文字列を確認してください。 – Wheels73

+0

'TypeA'内のプロパティを' public MyVars Vars {get;あなたの 'MyVars'は' IDictionary 'を実装していますか? – Oliver

答えて

0

見つけました。私はJsonConverter属性を使用する必要があります。

[JsonConverter(typeof(MyVarsConverter))] 
public MyVars Vars { get; set; } 

、コンバータの実装は辞書からMyVarsインスタンスへの変換を行う必要があります:あなただけのドキュメントを使用していないのはなぜ

public class MyVarsConverter : JsonConverter 
{ 
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     var dictionary = serializer.Deserialize<Dictionary<string, MyVar>>(reader); 
     var myVars = new MyVars(dictionary); 
     return myVars; 
    } 
    ... 
} 
0

あなたは、jオブジェクトを使用してそれを行うjオブジェクトを使用して値を抽出し、あなたがしたいプロパティに設定することができます。私はあなたができるJOBJECT城

var name jo.GetValue("Name ").ToString(); 

を持っているなど、あなたのカスタムモデルにJOBJECTとエキスと設定された値をループのために 。

関連する問題