如何在.Net中自定义嵌套类的反序列化

时间:2017-04-12 03:00:55

标签: c# json deserialization

假设我有:

Class A
{
    [JsonProperty(PropertyName = "label")]
    string _label;
}
Class B
{
    [JsonProperty(PropertyName = "label")]
    string _label;

    [JsonProperty(PropertyName = "class_a")]
    A _a;
}
Class C
{
    [JsonProperty(PropertyName = "label")]
    string _label;

    [JsonProperty(PropertyName = "class_b")]
    B _b;
}

我可以将它序列化为json并将其发送到服务器:

{
    label: "Label C"
    class_b: {
        label: "Label B"
        class_a: {
            label: "Label A"
        }
    }
}

但是,我从服务器获得的格式如下:

{
    label: "Label C"
    class_b: {
        label: "Label B"
        class_a: {
            label: [
                {
                    label0: "Label A"
                }
            ]
        }
    }
}

你可以看到class_a中的标签被改为数组而不是字符串,我需要自定义从json到A类的转换,将数组转换回字符串。那么处理它的最佳方法是什么?

我正在考虑两种方式:

1) 在每个类中实现静态方法To *:

class A {
    public static A ToA(JToken token) {
        label = token["label"][0]["label0"];
    }
}
class B {
    public static ToB(JToken token) {
        label = token["label"];
        _a = A.ToA(token["class_a"]);
    }
}
class C {
    public static ToC(Joken token) {
        label = token["label"];
        _b = B.ToB(token["class_b"])
    }
}

2) 实现自定义的JsonConverter并覆盖ReadJson函数:

public class CustomizedJsonConverter : JsonConverter {
    // This should do the normal converstion for class B and C, but customized convertion for class A
    override ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {}
}

问题: 1)method1听起来合理吗? 2)我需要一些关于method2的指导,因为我不知道如何在嵌套类中处理它

0 个答案:

没有答案