我理解创建外部 JsonConverter 类的价值,但是在很多情况下我发现它不必要地繁琐。
有没有一种通用的方法来告诉 JSon.NET,如果一个类有一个string ToJson()用于序列化的方法,如果该类有一个void FromJson(string json)用于反序列化的方法?
或者/还有对于不可变类型,如果一个类有static T FromJson(string json)用途?
我们需要一个特殊的转换器:
namespace Newtonsoft.Json {
class JsonManualConverter : JsonConverter {
public override bool CanConvert(Type t) => t.GetMethod("ToJson") != null && t.GetMethod("FromJson") != null;
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) =>
objectType.GetMethod("FromJson").Invoke(new object(), new object[] { JRaw.Create(reader).ToString() });
public override void WriteJson(JsonWriter writer, object o, JsonSerializer serializer) =>
writer.WriteRawValue(o.GetType().GetMethod("ToJson").Invoke(o, new object[] { }) as string);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以简单地这样做:
[JsonConverter(typeof(JsonManualConverter))]
class MyClass {
public string ToJson() => // serialize and return json string
static public MyClass FromJson(string json) => // deserialize and return a MyClass instance
...
}
Run Code Online (Sandbox Code Playgroud)
并且 Json.Net 将使用这些方法
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |