1

私はASP.NET Web API のXMLとJSONのフォーマットをリソースとして使用できるように、ASP.NET Web APIに取り組んでいます。私のWeb APIサービスのリソース・モデル・タイプには、ユーザーが送信しないプロパティーがあります。しかし、私はそれを返信するように設定しなければなりません。Web API要求処理中にXMLシリアル化用のJsonSerializerSettings.MissingMemberHandlingに相当するものはありますか?

たとえば、新しいアイテムをデータベースに保存するPOSTリクエストがあります。私のサービスは、同じリソース・モデルとそれが保存されていることを示す追加のプロパティーで応答します。

私はこの追加プロパティーを自分のリソース・モデルに追加しました。私がFiddlerでXMLリクエストを渡してテストすると、新しいプロパティが見つからないと言ってHTTP400というメッセージが表示されます。 JSON入力の場合、おそらくデフォルトのJSON設定JsonSerializerSettings.MissingMemberHandlingが原因で問題なく動作しています。

XMLデシリアライゼーションと同等のプロパティがありますか?

サンプル入力XML:

<MyResource> 
    <Property1>ABC</Property1> 
    <Property2>DEF</Property2> 
</MyResource> 

サンプル出力のXML私は送るつもり:

The property Id was missing 

マイリソース・モデルは次のようになりますように

<MyResource> 
    <Property1>ABC</Property1> 
    <Property2>DEF</Property2> 
    <Id>123</Id>  
</MyResource> 

エラーになります。

public string Property1 { get; set; } 
public string Property2 { get; set; } 
public int Id { get; set; } 

答えて

1

Microsoftの「JSON and XML Serialization in ASP.NET Web API」ページでは、(XMLシリアル化の見出しの下にある)XMLシリアル化について言うためにこれを持っています

あなたはシリアル化をより細かく制御する必要がある場合、あなたはのDataContractを持つクラスを飾ることができます属性。この属性が存在する場合、以下のように、クラスがシリアライズされます。

  • アプローチ「オプトイン」:プロパティとフィールドがデフォルトで直列化されていません。


    をIsRequiredこの指示値を取得または設定します。データメンバー属性

は、データメンバーの属性は次のようpropertyを持っているとプロパティまたはフィールドをシリアル化するには、それを飾りますシリアライゼーションエンジンは、メンバーが読み取りまたはデシリアライズ時に存在していなければなりません。

したがって、文書からIdプロパティを[DataMember(IsRequired=false)]で飾ると、XMLシリアライザでデフォルト値のままにすることができます。

デフォルト値は0なので、その値を「値なし」のマーカーとして明示的にチェックする必要があります。 ID = 0のエンティティとのIDがのエンティティを論理的に区別するには、そのタイプをint?に変更することを考慮してください。デフォルト値はnullです。

+0

モデルを 'DataContract'で装飾し、プロパティを' DataMember(IsRequired = false) 'で装飾しました。まだ同じエラーが発生しています。私のメディアタイプフォーマッタの設定を掘り下げて、そこに何かを調整する必要があるかどうかを確認しようとしています。 –

関連する問題