JSON.Netを使用して構造体をシリアル化/逆シリアル化すると、ビルドイン構造体の型(System.Drawing.Sizeなど)は文字列にシリアル化されますが、カスタム構造体の型はJSONオブジェクトにシリアル化されます。例えばJSON.Net構造体のシリアル化の不一致
:
using System;
using System.Drawing;
using Newtonsoft.Json;
namespace TestJsonNet
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(JsonConvert.SerializeObject(new Size(50, 50)));
Console.WriteLine(JsonConvert.SerializeObject(new Size2(50, 50)));
}
}
struct Size2
{
public int Width { get; set; }
public int Height { get; set; }
public Size2(int w, int h) : this()
{
Width = w; Height = h;
}
}
}
出力以下:メモリレイアウトは常に同じであるため
"50, 50"
{"Width":50,"Height":50}
私は、文字列に構造体をシリアル化の考え方を理解することができます。しかし、なぜカスタム構造体を直列化する際に相違がありますか?
また、JSON.Netに後者のような構造体(JSONではなく文字列)をシリアル化するようにしたいと思います(内部的な理由から)。それが可能なら、どのように達成できますか?
私はこの記事を見つけた[JSON.NETシリアライゼーショントラブル](http://stackoverflow.com/questions/9750836/json-net-serialization-trouble)しかし、私はまだ、すべての構造体型がこのような振る舞いをしないようにしたいと考えています。 –