6

Json.NETを使用して JSON 文字列をオブジェクトに逆シリアル化する場合、JSON スターリングにキー/プロパティが存在するように要求し、NULL 値を許可するにはどうすればよいですか?

例えば:

クラス/オブジェクトがあるとしましょう...

[DataContract]
public class Car
{
    [DataMember(IsRequired = true)]
    public string Vin {get; set;}

    [DataMember(IsRequired = true)]
    public string Color {get; set;}

    public string Description {get; ;set}
}

上記の例では、VIN と Color が必須であり、いずれかが JSON 文字列にない場合、例外がスローされます。ただし、逆シリアル化された後に Description プロパティに値があるかどうかはオプションです。つまり、NULL は有効な値です。JSON 文字列でこれを行うには、次の 2 つの方法があります。

1)

{
    "vin": "blahblahblah7",
    "color": "blue",
    "description":  null
}

または 2)

{
    "vin": "blahblahblah7",
    "color": "blue"
}

問題は、説明のキーと値のペアが JSON 文字列に含まれていないという理由だけで、説明の値が NULL であると想定したくないことです。JSON の送信者に、NULL に設定することを明示してもらいたい。シナリオ 2 が発生した場合は、それを検出してエラー メッセージで応答したいと考えています。では、キーと値のペアが存在することを要求し、値として NULL を受け入れるにはどうすればよいでしょうか?

少しでも役立つ場合は、ASP.NET Web APIプロジェクトのコンテキスト内でこの問題を解決しようとしています。

4

3 に答える 3

2

DefaultValueAttribute http://james.newtonking.com/projects/json/help/index.html?topic=html/T_Newtonsoft_Json_DefaultValueHandling.htmを探していると思います

于 2013-04-30T04:16:37.333 に答える
2

ここでの本当の問題は、送信者に強制的に一部の値を null に設定させたいのはなぜですか? アプリを作成している間、ユーザーに行動を強制することはできません。これは、アプリをハッキングするための最大の窓口です。

ある時点で、ユーザーがあなたが望むことをしないと常に想定してください。その JSON が所有している他のアプリからのものである場合は、null を送信するだけで、外部アプリまたはユーザー入力が可能であると想定されます。

Required は、フィールドが入力に必須であることを意味するのではなく、値が必要であることを意味します。それはあなたの問題だ。

于 2013-04-30T04:15:13.633 に答える