假设我有一些定义ToString()
的类:
class Person {
public override string ToString() { /* ... */ }
}
并假设某个实例包含在某些模型中:
public Person Person { get; }
然后按如下所示进行序列化:
"person": {
"value": "Foo Bar"
}
但是我期望的是:
"person": "Foo Bar"
我可以以某种方式执行此操作,还是必须使用自定义转换器?
更新
不,这不是该链接问题的重复。这说明了如何对类型进行双向转换。考虑到我的类型已经具有ToString
方法,我想进行单向转换-即仅序列化,而不是反序列化。
问题不在于如何编写类型转换器-而是在没有类型转换器的情况下这种单向串行化是否可行。
答案 0 :(得分:1)
我最近在一个项目中遇到了这个问题,而我的团队唯一想到的就是必须编写一个类型转换器。
答案 1 :(得分:0)
我想要一种单向转换,该转换依赖于我的类型的ToString()
重载。这用于在服务器上序列化并用于REST响应的数据。
这就是我所做的:
public class StringConverter : JsonConverter {
public override bool CanConvert(Type objectType) {
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
throw new NotSupportedException("This one-way converter cannot be used for deserialization.");
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
writer.WriteValue(value.ToString());
}
}
像这样使用:
[JsonConverter(typeof(StringConverter))]
public Person Person { get; } // assumes Person has overloaded ToString()
序列化的结果是这样的:
"person": "Foo Bar"
(而不是"person": { "value": "Foo Bar" }
。)
也许更好的名字是ToStringSerializer
或OneWayStringConverter
。