0

(驚いたことに) XML と JSON を受け入れる必要がある Web API サービスがあります。まず、モデルは次のとおりです。

[DataContract]
public class SerializedCustomerEvent
{
    [DataMember]
    public string TypeID { get; set; }
    [DataMember]
    public ContextPair[] Context { get; set; }
}

public class ContextPair
{
    public string Key { get; set; }
    public string Value { get; set; }
}

API コントローラーのメソッドは次のとおりです。

public void Post(SerializedCustomerEvent value)
{
    _queueBroker.Queue(value);
}

ここで、私が何かを見落としている部分があります。Fiddler からの JSON 投稿は正常に機能します。

Content-Type: application/json; charset=utf-8

{
    "TypeID":"ABC",
    "Context":
    [
        {"Key":"Field1","Value":"123"},
        {"Key":"Field2","Value":"Jeff"}
    ]
}

ただし、XML バージョンは機能しません。Context プロパティは常に null です。

Content-Type: application/xml; charset=utf-8

<?xml version="1.0"?>
<SerializedCustomerEvent xmlns="http://schemas.datacontract.org/2004/07/MyNamespace">
    <TypeID>XMLWow</TypeID>
    <Context>
        <ContextPair>
            <Key>Field1</Key>
            <Value>123</Value>
        </ContextPair>
        <ContextPair>
            <Key>Field2</Key>
            <Value>Jeff</Value>
        </ContextPair>
    </Context>
</SerializedCustomerEvent>

ここで何が欠けていますか?

4

1 に答える 1

2

この SO 投稿を参照してください。これは、データ コントラクトがメンバーがアルファベット順であると想定しているためです。したがって、ソース内で TypeID 要素と Context 要素を交換すると、両方ともオブジェクトに取り込まれます。

于 2013-08-23T20:32:51.463 に答える