2017-06-12 95 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; set;}'並且你的'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

您可以使用Jobject執行此操作,使用Jobject提取值並將其設置爲您想要的屬性。 對於如我有一個Jobject祚

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

你可以通過Jobject循環,並提取與設定值,以自定義模式。