Quando si utilizza JSON.Net per serializzare/deserializzare le strutture, un tipo di struttura build-in (come System.Drawing.Size) viene serializzato su una stringa, mentre un tipo di struct personalizzato si serializza su un oggetto JSON.JSON.Net Struct Serialization Discrepancy
Ad esempio:
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;
}
}
}
Uscite quanto segue:
"50, 50"
{"Width":50,"Height":50}
posso capire la filosofia che ispira la serializzazione una struct in una stringa, dal momento che il layout di memoria è sempre lo stesso; tuttavia, perché la discrepanza durante la serializzazione di una struttura personalizzata?
Inoltre, vorrei (per motivi di legacy interna), come avere JSON.Net serializzare le strutture come quest'ultimo caso (cioè come JSON, non stringa). Se è possibile, come può essere raggiunto?
Ho trovato questo articolo [JSON.NET serializzazione guai] (http://stackoverflow.com/questions/9750836/json-net-serialization-trouble) , tuttavia mi piacerebbe comunque disattivare questo comportamento per tutti i tipi di struct in un colpo solo. –