JSON.Netを使用して構造体をシリアル化/逆シリアル化する場合、組み込みの構造体タイプ(System.Drawing.Sizeなど)は文字列にシリアル化されますが、カスタム構造体タイプはJSONオブジェクトにシリアル化されます。
例えば:
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として)。可能であれば、どうすればそれを達成できますか?