C# 自定义JSON序列化以保存和减少正在传输的数据

C# 自定义JSON序列化以保存和减少正在传输的数据,c#,json,json.net,C#,Json,Json.net,我们都喜欢JSON格式。与XML文件相比,它节省了大量字节。这就是它如此流行的原因之一 现在,我想挤出更多的汁,从服务器返回更小的JSON文件 考虑到我的数据将以这种格式绑定到前端的网格 id a b c key1 1 2 3 key2 4 5 6 key3 7 8 9 我们可能会返回以下格式的JSON: {data: [ { "id": "key1", "a": "1", "b": "2", "c": "3" },

我们都喜欢JSON格式。与XML文件相比,它节省了大量字节。这就是它如此流行的原因之一

现在,我想挤出更多的汁,从服务器返回更小的JSON文件

考虑到我的数据将以这种格式绑定到前端的网格

 id     a   b   c
key1    1   2   3
key2    4   5   6
key3    7   8   9
我们可能会返回以下格式的JSON:

{data: [
    { "id": "key1", "a": "1", "b": "2", "c": "3" },
    { "id": "key2", "a": "4", "b": "5", "c": "6" },
    { "id": "key3", "a": "7", "b": "8", "c": "9" },
]}
如您所见,我们正在为每一行重复列名

如果JSON的格式如下所示呢

{
    "meta": ["a", "b", "c"],
    "data": 
    {
        "key1": ["1", "2", "3"],
        "key2": ["4", "5", "6"],
        "key3": ["7", "8", "9"]
    }
} 
如果我们有一百行这样的行,我们可以节省大量字节


问:是否有一个自定义的JSON.net序列化程序可以这样做?或者我需要自己写吗?

您需要自己写,但是,作为一种替代方法,您可以gzip您的响应,这可能在响应大小方面做得更好。

但是,您需要自己写,作为一种替代方法,您可以gzip您的响应,这可能在响应大小方面做得更好。

我认为如果确实有必要,您需要自己实现它

无论如何,还有一些其他选项可以减少JSON.NET支持的序列化JSON大小,如下所述:

总之,您可以通过以下方式减少JSON大小:

不使用JSONIGNOREATTRITE和DataMemberAttribute在序列化JSON结果中包含不必要的模型属性 通过使用格式删除不必要的空格和换行符。无 使用NullValueHandling.Ignore在序列化JSON结果中不包括具有null值的属性 不包括序列化JSON中具有默认值的属性 通过使用DefaultValueHandling.Ignore获得结果 通过使用IContractResolver接口的自定义实现,仅在序列化JSON结果中包含特定的属性集
我认为如果真的有必要的话,你需要自己实现它

无论如何,还有一些其他选项可以减少JSON.NET支持的序列化JSON大小,如下所述:

总之,您可以通过以下方式减少JSON大小:

不使用JSONIGNOREATTRITE和DataMemberAttribute在序列化JSON结果中包含不必要的模型属性 通过使用格式删除不必要的空格和换行符。无 使用NullValueHandling.Ignore在序列化JSON结果中不包括具有null值的属性 不包括序列化JSON中具有默认值的属性 通过使用DefaultValueHandling.Ignore获得结果 通过使用IContractResolver接口的自定义实现,仅在序列化JSON结果中包含特定的属性集
非常感谢。我会试试这些选项。干杯非常感谢。我会试试这些选项。干杯