【发布时间】:2012-08-26 05:04:41
【问题描述】:
我正在使用 Json.NET,我有以下代码。
public class Row
{
[JsonProperty]
public IDictionary<string, object> Cells { get; set; }
}
行和单元格是动态生成的,我有 C# 动态/扩展功能来创建这些单元格。当 Json.NET 序列化动态实例时,它会生成我想要的正确 json 结构。但是,对于大型数据结构,它会对性能产生不利影响。例如,JsonSerializer 在序列化过程中非常广泛地调用 DynamicObject TryGetMember。因此我需要一个静态数据结构,这样序列化会快得多。 synamic Expando 对象仍会创建动态属性,但我希望 Json.NET 序列化使用静态结构(基于动态结构创建),因此序列化会快得多。
Cells 字典根据动态结构填充,并通过调用 JsonConvert 生成序列化的 json 结构,如下所示。
string serializeObject = JsonConvert.SerializeObject(data, Formatting.Indented);
//json 输出:
{
"Data": [
{
"Cells": {
"column1": "20",
"column2": "20"
}
},
{
"Cells": {
"column1": "20",
"column2": "20"
}
}
]
}
但是我绑定的 UI Grid 需要下面的 json 结构
"Data": [
{
"column1": "20",
"column2": "20"
},
{
"column1": "20",
"column2": "20"
}
]
有没有办法可以删除“单元”并生成上述 Json 结构?
我查看了 JSON.NET 帮助文档,但找不到实现此目的的方法。 还尝试覆盖 DynamicContractResolver 的 CreateProperty 方法以查看是否可以更改序列化行为,但我无法这样做
public class DynamicContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(System.Reflection.MemberInfo member, MemberSerialization memberSerialization)
{
if (member.Name == "Cells")
{
//remove the name "Cells" from the serialized structure
}
return base.CreateProperty(member, memberSerialization);
}
}
或者这不是简单的支持?非常感谢任何建议或指示。
【问题讨论】: