3

WCFを使用してRestWebサービスを開発しています。

私は次の契約を結んでいます:

    namespace ADM.Contracts
    {
        [DataContract]
        public class FormContract
        {
            [DataMember]
            public int FormId { get; set; }

            [DataMember]
            public string FormName { get; set; }

            [DataMember]
            public List<BlockContract> blocks { get; set; }
        }

}

時々、ブロックがnullであり、私はこのJSONを送信します:

[
    {
        "FormId": 1,
        "FormName": "Formulario 1",
        "blocks": null
    },
    {
        "FormId": 2,
        "FormName": "Formulario 2",
        "blocks": null
    },
    {
        "FormId": 3,
        "FormName": "Formulario 3",
        "blocks": null
    }
]

送信を回避できます"blocks": nullか?

JSONデータを解析するためのAndroidクライアントを開発しています。どうすれば対処できnullますか?

4

2 に答える 2

6

nullDataMember属性に追加することで、リストメンバーのデフォルト値()を送信しないようにすることができます。

[DataMember(Name = "blocks", IsRequired=false, EmitDefaultValue=false)]
public List<BlockContract> blocks { get; set; }

ただし、これnullはJSONで有効な値であり、エンティティにデータが添付されていない可能性がある場合に処理する必要があることに注意してください。javascriptで、次のようなif条件を設定する方が簡単な場合があります。

for(var i = 0; i < data.length; ++i) {
   if (data[i].blocks != null) {
      //do stuff
   } else {
      //no blocks. do other stuff
   }
}

編集:問題のデータメンバーにブロックリストが定義されているかどうかを確認する必要がある場合は、ブロックメンバーがnullでないことを確認する後者のオプションを使用する必要がある可能性が高いことを指摘しておきます。

于 2012-04-09T16:12:24.593 に答える
0

私が見るいくつかのオプションがあります。

  1. JSONでnullを送信し続け、クライアント側でnullがないかどうかを確認し、そこで処理します。

  2. リソースクラスのnullを確認し、代わりに別のものを送信します(空のオブジェクト、空のフィールドを持つ新しいオブジェクト、プレースホルダーフィールドを持つオブジェクト)。

  3. nullのオブジェクトは含めないでください。(つまり、FormIdフィールドとFormNameフィールドはあるが、ブロックフィールドはないオブジェクトを送信します)。

何を選択しても、何かが存在しない場合に何が起こるかをAPIで伝達することが重要です。そして一貫性を保つ。

于 2012-04-09T16:12:30.240 に答える