为什么用 JsonPropertyAttribute 序列化 Version 不起作用?

Why serializing Version with JsonPropertyAttribute doesn't work?

我正在尝试用静态 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。但是,当我尝试像这样序列化它时,它失败并出现错误:Expected Version object value:

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,但不知道为什么。

ItemConverterType allows you to specify a converter to use for collection items. See Proper way of using Newtonsoft Json ItemConverterType。由于 stringVersion 未被视为集合,因此将被忽略。对于 属性 本身的转换器,请使用 [JsonConverter]

相反,如果您有 static List<Version> versions,则使用 [JsonProperty(ItemConverterType = typeof(VersionConverter))] 比较合适。