IT박스

Json.net의 null 필드 무시

itboxs 2020. 11. 14. 10:02
반응형

Json.net의 null 필드 무시


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 출력에 Field1OR Field2OR 만 있어야한다는 것 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, Field3을 nullable표시해야합니다 .

public struct structA
{
    public string Field1;
    public structB? Field2;
    public structB? Field3;
}

또는 구조체 대신 클래스를 사용하십시오.

문서 : NullValueHandling 열거 형


You can also apply the JsonProperty attribute to the relevant properties and set the null value handling that way. Refer to the Reference property in the example below:

Note: The JsonSerializerSettings will override the attributes.

public class Person
{
    public int Id { get; set; }

    [JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
    public int? Reference { get; set; }

    public string Name { get; set; }
}

Hth.

참고URL : https://stackoverflow.com/questions/9819640/ignoring-null-fields-in-json-net

반응형