[英]Json.Net Not Serializing Version Type properly
當我序列化一個沒有指定修訂或內部版本號的 Version 對象時,它不能被反序列化。 有沒有人見過這個?
這是我的代碼:
JsonSerializerSettings JsonSettings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Objects,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
NullValueHandling = NullValueHandling.Ignore
};
var ver = new Version(1000, 1);
var str = JsonConvert.SerializeObject(ver, Newtonsoft.Json.Formatting.Indented, JsonSettings);
var ver2 = JsonConvert.DeserializeObject(str, JsonSettings);
這實際上是有道理的,因為 json 字符串是:
{
"$type": "System.Version, mscorlib",
"Major": 1000,
"Minor": 1,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
}
無論如何,我是否可以在不設置 Revision 和 Build 的情況下反序列化它?
由於System.Version
沒有默認構造函數,您需要使用自定義轉換器:
public class VersionConverter : JsonConverter
{
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
JObject obj = serializer.Deserialize<JObject>(reader);
int major = obj["Major"].ToObject<int>();
int minor = obj["Minor"].ToObject<int>();
Version v = new Version(major, minor);
return v;
}
public override bool CanConvert(Type objectType)
{
return typeof(Version).IsAssignableFrom(objectType);
}
public override bool CanWrite { get { return false; } }
}
(請注意,您可以將其擴展為以類似方式考慮其他參數,如build
和revision
)
用法:
JsonSerializerSettings JsonSettings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Objects,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
NullValueHandling = NullValueHandling.Ignore,
Converters = new[] { new VersionConverter() }
};
var ver = new Version(1000, 1);
var str = JsonConvert.SerializeObject(
ver, Newtonsoft.Json.Formatting.Indented, JsonSettings);
var ver2 = JsonConvert.DeserializeObject<Version>(str, JsonSettings);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.