我正在尝试使用静态System.Version
字段序列化对象:
[JsonObject(MemberSerialization.OptIn)]
public class MyObj
{
[JsonProperty]
private static string testStr;
[JsonProperty(ItemConverterType = typeof(VersionConverter))]
private static Version ver = System.Reflection.Assembly...Version;
// some other non-serialized fields
// ...
}
我从this question了解到Version
需要一个自定义转换器,我将其添加为ItemConverterType
。但是,当我尝试像这样序列化它时,它失败并显示错误:预期版本对象值:
var o = MyObj();
using (StreamWriter file = File.CreateText(filename))
{
JsonSerializer serializer = new JsonSerializer { Formatting = Formatting.Indented };
serializer.Serialize(file, o); // error
}
如果我修改字段的属性,它可以正常工作:
public class MyObj
{
...
[JsonProperty]
[JsonConverter(typeof(VersionConverter))]
private static Version ver = System.Reflection.Assembly...Version;
...
我是属性新手。你能否解释为什么第一个失败?我确信我没有正确使用Json.NET
,但无法弄清楚原因。
答案 0 :(得分:0)
ItemConverterType
允许您指定用于集合项的转换器。见Proper way of using Newtonsoft Json ItemConverterType。由于string
和Version
未被视为集合,因此会被忽略。对于属性本身的转换器,请使用[JsonConverter]
。
相反,如果您有static List<Version> versions
,则使用[JsonProperty(ItemConverterType = typeof(VersionConverter))]
是合适的。