代码之家  ›  专栏  ›  技术社区  ›  SledgeHammer

Json。网络转换器未被调用[duplicate]

  •  0
  • SledgeHammer  · 技术社区  · 6 年前

    我正在尝试用静态 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 回复  |  直到 8 年前
        1
  •  1
  •   dbc    9 年前

    ItemConverterType 允许您指定要用于的转换器 收藏品 看见 Proper way of using Newtonsoft Json ItemConverterType 自从 string Version 没有被视为收藏,而是被忽略。对于属性本身上的转换器,请使用 [JsonConverter] .

    相反,如果你有 static List<Version> versions 使用 [JsonProperty(ItemConverterType = typeof(VersionConverter))] .