【问题标题】:Serializing a hierarchy of plain C# objects to a JSON array将普通 C# 对象的层次结构序列化为 JSON 数组
【发布时间】:2009-12-17 05:23:43
【问题描述】:

我在 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 KB,所以在这种情况下,它并没有真正的帮助。)

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

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

有没有办法自定义 JSON 序列化来做到这一点?还是我应该手动编写自己的序列化程序?

【问题讨论】:

标签: c# asp.net json serialization


【解决方案1】:

我尝试的不是必需的,因为 gzip 压缩会处理整个 JSON 提要,消除任何冗余。

【讨论】:

    【解决方案2】:

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

    即使使用 gzip 压缩,Protocol Buffers 格式也会比 JSON 小,但大小差异取决于您的数据是什么样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 2012-12-15
      • 2016-01-24
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多