JSONにシリアル化する必要のあるデータがあります。 JSON.NETを使用しています。私のコード構造はこれに似ています:
public struct structA
{
public string Field1;
public structB Field2;
public structB Field3;
}
public struct structB
{
public string Subfield1;
public string Subfield2;
}
問題は、JSON出力にはField1
OR Field2
OR Field3
-使用されるフィールドに依存します(つまり、nullではありません)。デフォルトでは、JSONは次のようになります。
{
"Field1": null,
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {"Subfield1": null, "Subfield2": null},
}
NullValueHandling.Ignore
、しかし、それは私にこのようなJSONを与えます:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {}
}
そして私が必要なのはこれです:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}
これを達成する簡単な方法はありますか?
はい、JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
を使用する必要があります。
ただし、 構造体は値型 であるため、Field2、Field3nullableをマークして必要な結果を取得する必要があります。
public struct structA
{
public string Field1;
public structB? Field2;
public structB? Field3;
}
または、構造体の代わりにクラスを使用します。
ドキュメント: NullValueHandling Enumeration
また、JsonProperty属性を関連するプロパティに適用し、そのように処理するnull値を設定することもできます。以下の例のReference
プロパティを参照してください。
注:JsonSerializerSettings
は属性をオーバーライドします。
public class Person
{
public int Id { get; set; }
[JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
public int? Reference { get; set; }
public string Name { get; set; }
}
ほら.