将纯C#对象的层次结构序列化为JSON数组

时间:2009-12-17 05:23:44

标签: c# asp.net json serialization

我在C#中有一个类结构,类似于以下内容:

[DataContract]
class Data
{
    [DataMember] public List<Hotel> Hotels { get; set; }
    // etc...
}

[DataContract]
class Hotel
{
    [DataMember] public int HotelID { get; set; }
    [DataMember] public string HotelName { get; set; }
    // etc...
}

我一直在使用'DataContractJsonSerializer'将其序列化为JSON。

但是,由于JSON包含所有属性名称,因此会产生大量冗余文本。

(你可能会说gZip减轻了这一点,但我相信gZip只压缩输出的一部分,比如前n千字节,所以在这种情况下,它并没有真正帮助。)

所以我更喜欢做的是以Javascript数组的格式吐出数据,如下所示:

[[1, "firstHotel"], [2, "secondHotel"], [3, "thirdHotel"], ...]

有没有办法自定义JSON序列化这样做?或者我应该手动编写自己的序列化程序?

2 个答案:

答案 0 :(得分:0)

我尝试的是没有必要的,因为gzip压缩将处理整个JSON提要,删除任何冗余。

答案 1 :(得分:0)

看起来protobuf-net可以处理DataContract带注释的类。它使用二进制协议缓冲区格式,比JSON更小,更快速地序列化/反序列化。您仍然可以将JSON转储到您需要的地方,以便人类可读(调试等)

即使使用gzip压缩,协议缓冲区格式也会小于JSON,但大小的差异取决于数据的样子。