我有一个类似这样的Json对象:
{"company": "My Company",
"companyStart" : "2015/01/01",
"employee" :
{ "name" : "john doe",
"startDate" : 1420434000000 } }
我的JSON对象如下:
public class Company {
public string company;
public DateTime companyStart;
public Employee employee;
}
public class Employee {
public string name;
public DateTime startDate;
}
我的原始代码反序列化的方式如下:
JsonConvert.DeserializeObject<Company>(jsonString);
这段代码可以将 Company.companyStart 转换为 DateTime,但是在转换 Employee.startDate 时无法处理 Long 类型。此 帖子 向我展示了如何创建自定义的 JsonConverter 将 long 转换为 DateTime,但正如您所见,在我的情况下,这将导致将 Company.companyStart 转换为 DateTime 出现问题。因此…… 我正在考虑像这样做:
public class Company : JsonBase {
...
}
public class Employee : JsonBase {
...
Employee() { Converter = new CustomDateConverter(); }
}
public class JsonBase {
private JsonConverter converter;
[JsonIgnore]
public JsonConverter Converter => converter ?? (converter = new StandardConverter());
}
JsonBase将包含标准转换器或
在我的代码中,我会将其转换为以下内容:
public T CreateJsonObject<T>() where T : JsonBase {
JsonBase json = (T) Activator.CreateInstance(typeof (T));
JsonConvert.DeserializeObject<T>(jsonString, json.Converter);
}
问题在于这种方法无法很好地发挥作用,因为该方法将仅使用最顶层的转换器来进行全部转换,而不是针对每个对象使用转换器。
有没有一种方法可以针对每个对象使用转换器?或者也许有更好的方法来解决这个问题。