c# – 为什么System.Version在JSON字符串不反序列化正确?
发布时间:2020-12-15 18:11:58 所属栏目:百科 来源:网络整理
导读:上下文:我需要传递一个包含大量属性/字段的对象(从中间层层到UI层).在这个属性列表中,一个是类型版本,它没有从 JSON字符串格式正确反序列化.我有一个JSON格式的XML作为JSON序列化字符串将返回短字符串结果. 问题: System.Version没有正确反序列化.我已经尝
上下文:我需要传递一个包含大量属性/字段的对象(从中间层层到UI层).在这个属性列表中,一个是类型版本,它没有从
JSON字符串格式正确反序列化.我有一个JSON格式的XML作为JSON序列化字符串将返回短字符串结果.
问题: 代码段1使用ServiceStack .NET library: var version = new Version(1,2,3,0); string reportJSON = JsonSerializer.SerializeToString<Version>(version); //{"Major":1,"Minor":2,"Build":3,"Revision":0,"MajorRevision":0,"MinorRevision":0} Version report2 = JsonSerializer.DeserializeFromString<Version>(reportJSON); string reportJSON2 = JsonSerializer.SerializeToString<Version>(report2); //{"Major":0,"Minor":0,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1} 代码片段2使用Newtonsoft .NET library但结果相同: var version = new Version(1,0); string reportJSON = JsonConvert.SerializeObject(version); //{"Major":1,"MinorRevision":0} Version report2 = JsonConvert.DeserializeObject<Version>(reportJSON); string reportJSON2 = JsonConvert.SerializeObject(report2); //{"Major":0,"MinorRevision":-1} 如何解决这个问题?还是哪个其他JSON.NET库可以正常工作? 解决方法
Newtonsoft.Json库在Newtonsoft.Json.Convertersnamespace中提供了一组通用转换器,其中包括可用于序列化和反序列化System.Version的VersionConverter.
请注意,您必须使用VersionConverterboth来进行序列化和反序列化. 所以用法是: using Newtonsoft.Json; using Newtonsoft.Json.Converters; string s = JsonConvert.SerializeObject(version,new VersionConverter()); Version v = JsonConvert.DeserializeObject<Version>(s,new VersionConverter()); 我不知道Newtonsoft的第一个版本是什么.Jsonthat包括该转换器.我有它,它是5.0.6. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |