コンテキスト:多数のプロパティ/フィールドを含むオブジェクトを中間層からUIレイヤに渡す必要があります。このプロパティのリストの中には、バージョンがJSON文字列形式から正しく非直列化されないバージョンのものがあります。私はJSONのシリアル化が短い文字列の結果を返すため、XML上で選択されたJSON形式を持っています。System.VersionのJSON文字列が正しくデシリアライズされないのはなぜですか?
問題: System.Versionが正しくデシリアライズされません。私は2つの異なる.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}
コードスニペット2 Newtonsoft .NET libraryを使用しても同じ結果と:この問題を解決する方法
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ライブラリが正しく動作するのですか?
[JavascriptSerializerを使用して不変オブジェクトに逆シリアル化できますか?](http://stackoverflow.com/questions/4080644/can-i-deserialize-to-an-immutable-object-using-javascriptserializer) – spender
@spender:しかし、それは不変の文字列オブジェクトでうまく動作します。 – Monish
@Monish [Here](http://stackoverflow.com/a/2085890/1180426)は、 'Version'クラスがXMLシリアライザブルではない理由を説明するリンクですが、JSONシリアライザにも同じメカニズムが適用されると確信しています。 –