我正在使用Json.NET,并且我有以下代码。JSON.NET自定义序列化以排除属性名称
public class Row
{
[JsonProperty]
public IDictionary<string, object> Cells { get; set; }
}
行和细胞是动态生成的,我不得不C#动态/ Expando的功能创建的那些细胞。当Json.NET序列化动态实例时,它会生成我想要的正确的json结构。但是,对于大型数据结构,它会对性能产生不利影响。例如,JsonSerializer在序列化期间相当广泛地调用DynamicObject TryGetMember。因此我需要一个静态数据结构,所以序列化会更快。合成的Expando对象仍然会创建动态属性,但我希望Json.NET序列化使用静态结构(基于动态结构创建),因此序列化会更快。
根据动态结构填充单元字典并通过调用JsonConvert生成序列化的json结构,如下所示。
string serializeObject = JsonConvert.SerializeObject(data, Formatting.Indented);
// JSON输出:
{
"Data": [
{
"Cells": {
"column1": "20",
"column2": "20"
}
},
{
"Cells": {
"column1": "20",
"column2": "20"
}
}
]
}
然而UI电网这我结合,需要以下JSON结构
"Data": [
{
"column1": "20",
"column2": "20"
},
{
"column1": "20",
"column2": "20"
}
]
有没有一种方法,我可以删除“细胞”并产生如上的Json结构?
我看着JSON.NET帮助docos,我找不到一种方法来实现这一点。 还试图重写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);
}
}
或者,这不是简单的支持?任何建议或方向非常赞赏。