私はJson.NETを使用しており、次のコードがあります。
public class Row
{
[JsonProperty]
public IDictionary<string, object> Cells { get; set; }
}
行とセルは動的に生成され、それらのセルを作成するためのC#動的/拡張機能がありました。Json.NETが動的インスタンスをシリアル化すると、必要な正しいjson構造が生成されます。ただし、大規模なデータ構造の場合、パフォーマンスに悪影響を及ぼします。たとえば、JsonSerializerは、シリアル化中にDynamicObjectTryGetMemberを非常に広範囲に呼び出します。したがって、シリアル化がはるかに高速になるように、静的データ構造が必要でした。シナミック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ヘルプドコを調べましたが、これを実現する方法が見つかりませんでした。また、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);
}
}
または、これは単にサポートされていませんか?どんな提案や指示も大歓迎です。