2

私はこのような方法を持っています:

public JObject Get(int id)
        {
            return new JObject(new JProperty("Test", "Test"));
        }

JSONをリクエストすると問題なく動作しますが、XMLをリクエストすると、Web APIフレームワークからHTTPエラーコード500が取得されます(例外はありません)。XMLformatterはjsonを記述できると考えているようです。私はそれをテストすることができます:

bool test = GlobalConfiguration.Configuration.Formatters.XmlFormatter.CanWriteType(typeof(JArray));
            bool test2 = GlobalConfiguration.Configuration.Formatters.XmlFormatter.CanWriteType(typeof(JObject));
            bool test3 = GlobalConfiguration.Configuration.Formatters.XmlFormatter.CanWriteType(typeof(JProperty));
            bool test4 = GlobalConfiguration.Configuration.Formatters.XmlFormatter.CanWriteType(typeof(JValue));

常に「true」を返します。xmlformatterを削除したくありませんが、サーバーがHTTPエラー500をスローすることは受け入れられません。これは、私が生成せず、解決できません。最良の方法は、XMLformatterがオブジェクトをシリアル化できることです...

4

2 に答える 2

6

DataContractSerializer は、匿名/動的型 (または一般的な「オブジェクト」) をサポートしていません。そのため、XML にシリアライズされていません。

XML シリアル化が必要な場合は、厳密に型指定されたオブジェクトを使用する必要があります。

于 2012-06-15T12:42:22.820 に答える
1

Web API メソッドから JObject を返すのはなぜですか? これは、XML シリアライズできない JSON 固有のオブジェクトです。フォーマット固有のオブジェクトを返すべきではありません。

単純なモデル オブジェクト (またはHttpResponseMessage):

public object Get(int id)
{
    return new { Test = "Test" };
}

または強く型付けされたオブジェクトを直接:

public class MyModel
{
    public string Test { get; set; }
}

その後:

public MyModel Get(int id)
{
    return new MyModel { Test = "Test" };
}

構成されたメディア フォーマッタは、クライアントの要求に応じて、このオブジェクトを適切な形式にシリアル化するジョブを実行します。API アクションでシリアル化形式固有のオブジェクトを使用しないでください。それは彼らの責任ではありません。

于 2012-06-15T09:10:41.117 に答える