私はJSON.NET4.5を使用しており、このブログ投稿に従って、ユーザーオブジェクトを正しくシリアル化しようとしています。
私は何時間も壁に頭を打ちつけてきました。私が何をしても、intが「その値型のデフォルトの単一化値」(別名0)に設定されている場合、Json.NETにintを無視させることはできません。
[DataContract]
public class User
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name{ get; set; }
[DataMember]
public string Email{ get; set; }
}
これをシリアル化するための呼び出しは次のとおりです。
var user = new User()
{
Id = 0,
Name = "John Doe",
Email = null
}
string body = JsonConvert.SerializeObject(user, Formatting.Indented, new JsonSerializerSettings()
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
結果のJSONは次のとおりです。
{
"Id": 0,
"Name": "John Doe"
}
メールはnullのため省略されています。Idは0であるため、省略する必要があります。また、Idの[DefaultValue(0)]属性を明示的に設定してみましたが、効果はありません。
私は何か間違ったことをしていますか、それともこれはバグですか?
アップデート
もう一度見てみると、DefaultValueAtributeはintに対して尊重されています。したがって、このコードではID0がシリアル化されません。
[DataContract]
public class User
{
[DataMember]
[DefaultValue(0)]
public int Id { get; set; }
[DataMember]
public string Name{ get; set; }
[DataMember]
public string Email{ get; set; }
}
述べられた行動ではありませんが、少なくともそれは私が私の人生を続けることを可能にします。