假设我有:
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的指导,因为我不知道如何在嵌套类中处理它