6

私は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)]属性を明示的に設定してみましたが、効果はありません。

私は何か間違ったことをしていますか、それともこれはバグですか?

アップデート

もう一度見てみると、DefaultValueAtributeintに対して尊重されています。したがって、このコードでは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; }        
}

述べられた行動ではありませんが、少なくともそれは私が私の人生を続けることを可能にします。

4

1 に答える 1

1

バグのようです。ドキュメントの例によると、DefaultValueAttributeは必要ありません。これは、たとえば、シリアル化するタイプを編集できない場合に役立ちます。

パッチ/ハック(4.5r8に対して)とともに、Githubで問題を作成しました。

于 2012-08-16T09:24:50.720 に答える