gpt4 book ai didi

c# - 为什么JSON字符串中的System.Version无法正确反序列化?

转载 作者:行者123 更新时间:2023-12-03 13:25:15 24 4
gpt4 key购买 nike

上下文:我需要将包含大量属性/字段的对象(从中间层传递到UI层)。在此属性列表中,其中一个是Version类型,该类型未从JSON字符串格式正确反序列化。我选择了XML之上的JSON格式,因为将JSON序列化为string会返回短字符串结果。

问题:
System.Version无法正确反序列化。我尝试了两个不同的.NET库。以下是每个代码段:

使用ServiceStack .NET library的代码片段1:

        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}

使用 Newtonsoft .NET library编写代码段2,但结果相同:
        var version = new Version(1, 2, 3, 0);
string reportJSON = JsonConvert.SerializeObject(version);
//{"Major":1,"Minor":2,"Build":3,"Revision":0,"MajorRevision":0,"MinorRevision":0}


Version report2 = JsonConvert.DeserializeObject<Version>(reportJSON);
string reportJSON2 = JsonConvert.SerializeObject(report2);
//{"Major":0,"Minor":0,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1}

如何解决这个问题?或哪个其他JSON.NET库可以正常工作?

最佳答案

Newtonsoft.Json库在Newtonsoft.Json.Converters命名空间中提供了一组通用转换器,包括 VersionConverter ,可用于序列化和反序列化System.Version

注意,虽然必须使用,但必须同时使用VersionConverter进行序列化和反序列化。
这是因为标准序列化将生成例如:{"Major":1,"Minor":2,"Build":3,"Revision":0,"MajorRevision":0,"MinorRevision":0},而VersionConverter反序列化则需要像"1.2.3"中那样的简单字符串。

因此用法是:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

string s = JsonConvert.SerializeObject(version, new VersionConverter());
Version v = JsonConvert.DeserializeObject<Version>(s, new VersionConverter());

我不确定包含该转换器的 Newtonsoft.Json的第一个版本是什么。我的是5.0.6。

关于c# - 为什么JSON字符串中的System.Version无法正确反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13170386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com