2012-03-22 2 views
54

JSON에 직렬화해야하는 데이터가 있습니다. JSON.NET을 사용하고 있습니다. 내 코드의 구조는 다음과 유사합니다Json.net에서 null 필드를 무시합니다.

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

public struct structB 
{ 
    public string Subfield1; 
    public string Subfield2; 
} 

문제는, 내 JSON 출력 만 Field1 또는 Field2 또는 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"}, 
} 

간단한 방법이 있나요?

+0

가능한 [json.net을 사용하여 null 인 경우 클래스의 속성을 무시하는 방법]의 복제본 (http://stackoverflow.com/questions/6507889/how-to-ignore-a-property-in-class-if) -null-using-json-net) –

답변

58

JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore을 사용해야합니다.

하지만 예상 된 결과를 얻기 위해 필드 2, 널 (NULL) 입력란 3 를 표시해야 structs are value types 이유는

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

하거나 대신 구조체의 클래스를 사용합니다.

문서 : NullValueHandling Enumeration

+1

자세한 내용은 http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size를 참조하십시오. aspx –

54

또한 관련 특성에 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; } 
} 

Hth.

관련 문제