コンテキスト: 多数のプロパティ/フィールドを含むオブジェクトを (中間層レイヤーから UI レイヤーに) 渡す必要があります。このプロパティのリストの 1 つは、JSON 文字列形式から正しく逆シリアル化されていないバージョン タイプです。文字列へのJSONシリアル化は短い文字列の結果を返すため、XMLよりもJSON形式を選択しました。
問題: System.Version が正しく逆シリアル化されません。2 つの異なる .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}
コード スニペット 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}
これを修正する方法は?または、他のどの JSON.NET ライブラリが正しく機能しますか?