在SQL Server中存储System.Version的最佳方法是什么?
当我使用varchar类型时,asc的顺序结果是:
1.0.0.0
11.0.0.0
12.0.0.0
2.0.0.0
Run Code Online (Sandbox Code Playgroud) 上下文:我需要传递一个包含大量属性/字段的对象(从中间层到UI层).在这个属性列表中,一个是Version类型,它没有从JSON字符串格式正确反序列化.我在XML上选择了JSON格式,因为字符串的JSON序列化将返回短字符串结果.
问题:System.Version没有正确反序列化.我尝试了两种不同的.NET库.以下是每个代码段:
使用ServiceStack .NET库的代码片段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}
Run Code Online (Sandbox Code Playgroud)
Code Snippet 2使用Newtonsoft .NET库但结果相同:
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}
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?或者哪个其他JSON.NET库可以正常工作?
是否有Java等效的.NET的System.Version类?我怎么用Java说这个?
Version myVersion = new Version(2, 1);
Run Code Online (Sandbox Code Playgroud) 如何强制转换为System.VersionPowerShell 中的类型,或更可能更好地理解为什么我不能任意分配数字字符串类型System.Version?
我们将一些软件更新放入标题包含版本号的文件夹中。在尝试获取有关所摄取的最新版本的报告时,我一直在做以下快速而肮脏的事情:
ForEach ($Folder in $(Get-ChildItem -Path $SoftwareDirectory -Directory))
{
$CurrentVersion = $Folder -Replace "[^0-9.]"
If ($CurrentVersion -ne $null)
{
If ([System.Version]$CurrentVersion -gt [System.Version]$MaxVersion)
{
$MaxVersion = $CurrentVersion
$MaxFolder = $Folder
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将提供如下目录标题,
大多数时候,这是可以接受的。然而,当遇到一些数字较长的怪人时,比如下面这样,
在这种情况下,System.Version由于结果字符串太长而被拒绝。
Cannot convert value "4331364" to type "System.Version". Error: "Version string portion was too short or too long."
Run Code Online (Sandbox Code Playgroud)