为什么用 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。由于 string
和 Version
未被视为集合,因此将被忽略。对于 属性 本身的转换器,请使用 [JsonConverter]
。
相反,如果您有 static List<Version> versions
,则使用 [JsonProperty(ItemConverterType = typeof(VersionConverter))]
比较合适。
我正在尝试用静态 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。由于 string
和 Version
未被视为集合,因此将被忽略。对于 属性 本身的转换器,请使用 [JsonConverter]
。
相反,如果您有 static List<Version> versions
,则使用 [JsonProperty(ItemConverterType = typeof(VersionConverter))]
比较合适。