为什么使用JsonPropertyAttribute序列化版本不起作用?

时间:2016-07-12 02:56:43

标签: c# json.net custom-attributes

我正在尝试使用静态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,但无法弄清楚原因。

1 个答案:

答案 0 :(得分:0)

ItemConverterType允许您指定用于集合项的转换器。见Proper way of using Newtonsoft Json ItemConverterType。由于stringVersion未被视为集合,因此会被忽略。对于属性本身的转换器,请使用[JsonConverter]

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