Json.NET 을 사용하여 클래스를 JSON으로 직렬화하고 있습니다.
나는 이런 수업을 가지고있다 :
class Test1
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("url")]
public string URL { get; set; }
[JsonProperty("item")]
public List<Test2> Test2List { get; set; }
}
is 일 때만 JsonIgnore()
속성에 Test2List
속성 을 추가하고 싶습니다 . null이 아닌 경우 json에 포함시키고 싶습니다.Test2List
null
답변
James Newton King에 따르면 : JavaScriptConvert를 사용하지 않고 직접 serializer를 만드는 경우 무시하도록 설정할 수 있는 NullValueHandling
속성 이 있습니다.
샘플은 다음과 같습니다.
JsonSerializer _jsonWriter = new JsonSerializer {
NullValueHandling = NullValueHandling.Ignore
};
또는 @amit에서 제안한대로
JsonConvert.SerializeObject(myObject,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings {
NullValueHandling = NullValueHandling.Ignore
});
답변
JsonProperty
속성을 사용하는 대체 솔루션 :
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
// or
[JsonProperty("property_name", NullValueHandling=NullValueHandling.Ignore)]
// or for all properties in a class
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
이 온라인 문서 에서 볼 수 있듯이 .
답변
@의 sirthomas의 대답과 마찬가지로, JSON.NET도 존중 특성 에를 :EmitDefaultValue
DataMemberAttribute
[DataMember(Name="property_name", EmitDefaultValue=false)]
이것은 당신이 이미 사용하는 경우 바람직 할 수 [DataContract]
및 [DataMember]
모델 유형과 JSON.NET 특정 속성을 추가 할 수 없습니다.
답변
당신은 쓸 수 있습니다: [JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
또한 속성을 기본값 (Null뿐만 아니라)으로 직렬화하지 않도록 처리합니다. 예를 들어 열거 형에 유용 할 수 있습니다.
답변
직렬화하는 객체의 모든 null을 무시하기 위해이 작업을 수행 할 수 있으며 null 속성은 JSON에 나타나지 않습니다.
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
var myJson = JsonConvert.SerializeObject(myObject, settings);
답변
그들의 사이트 에이 링크에서 볼 수 있듯이 (http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx) I 기본값을 지정하기 위해 [Default ()] 사용 지원
링크에서 가져온
public class Invoice
{
public string Company { get; set; }
public decimal Amount { get; set; }
// false is default value of bool
public bool Paid { get; set; }
// null is default value of nullable
public DateTime? PaidDate { get; set; }
// customize default values
[DefaultValue(30)]
public int FollowUpDays { get; set; }
[DefaultValue("")]
public string FollowUpEmailAddress { get; set; }
}
Invoice invoice = new Invoice
{
Company = "Acme Ltd.",
Amount = 50.0m,
Paid = false,
FollowUpDays = 30,
FollowUpEmailAddress = string.Empty,
PaidDate = null
};
string included = JsonConvert.SerializeObject(invoice,
Formatting.Indented,
new JsonSerializerSettings { });
// {
// "Company": "Acme Ltd.",
// "Amount": 50.0,
// "Paid": false,
// "PaidDate": null,
// "FollowUpDays": 30,
// "FollowUpEmailAddress": ""
// }
string ignored = JsonConvert.SerializeObject(invoice,
Formatting.Indented,
new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
// {
// "Company": "Acme Ltd.",
// "Amount": 50.0
// }
답변
@ Mrchief ‘s / @amit의 답변에 적응하지만 VB를 사용하는 사람들에게 적합
Dim JSONOut As String = JsonConvert.SerializeObject(
myContainerObject,
New JsonSerializerSettings With {
.NullValueHandling = NullValueHandling.Ignore
}
)