如何将json字典反序列化为自定义类型

时间:2017-06-12 11:15:03

标签: c# 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; }
}

2 个答案:

答案 0 :(得分:0)

您可以使用Jobject执行此操作,使用Jobject提取值并将其设置为您想要的属性。 例如,我有一个Jobject jo

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

您可以遍历Jobject并提取并设置值到您的自定义模型。

答案 1 :(得分: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;
    }
    ...
}