1

ディクショナリを C# Web サーバーに投稿します。POST ディクショナリを取得する方法を知りたいですか?
以下は私のサンプル辞書です

{"Debtor":{"CompanyName":"Big Company","AccNo":"300-G002","DocDate":"26-November-2012"}}

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "json/PostSalesOrderData", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Dictionary<string, Object.Test> PostSalesOrderData(object data);

    public Dictionary<string, Object.Test> PostSalesOrderData(object data)
    { 
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string str = serializer.Serialize(data);

        Dictionary<string, Object.Test> userData = serializer.Deserialize<Dictionary<string, Object.Test>>(str);

        return userData;

    }

Xcode 応答文字列

サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは、「System.Object 型のオブジェクトの逆シリアル化中にエラーが発生しました。トークン「"」が予期されていましたが、「D」が見つかりました。詳細については、サーバー ログを参照してください。例外スタック トレースは次のとおりです。

4

1 に答える 1

0

WCFを使用している場合は、に変更するPostSalesOrderData(object data)と自動で解析できる場合がありますPostSalesOrderData(Dictionary<string, VALUETYPE> data)

それでもうまくいかない場合は、生の文字列を取得して手動でデシリアライズします。

public Dictionary<string, Object.Test> PostSalesOrderData(string data)
{
    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<Dictionary<string,dynamic>>(data);

    ...
}

への逆シリアル化をテストしていませんDictionary<string, dynamic>。すべてのエントリが同じタイプである場合は、実際のモデル タイプをそこに配置する必要があるかもしれません。これが機能するように設定する必要がある場合もあります[WebInvoke(BodyStyle = WebMessageBodyStyle.Bare)]

于 2012-11-26T10:05:55.507 に答える