次のようなApiControllerでメソッドを作成しようとしました。
public DemoList<Demo> GetAll()
{
var result = new DemoList<Demo>() { new Demo(){Y=2}, new Demo(), new Demo(){Y=1} };
result.Name = "Test";
return result;
}
Demo と DemoList は次のようになります。
public interface INamedEnumerable<out T> : IEnumerable<T>
{
string Name { get; set; }
}
public class Demo
{
public int X { get { return 3; } }
public int Y { get; set; }
}
public class DemoList<T> : List<T>, INamedEnumerable<T>
{
public DemoList()
{
}
public string Name { get; set; }
}
次に、フィドラーで出力をチェックしました
GET http://localhost:8086/api/Demo
そして以下を得ました:
XML (application/xml に設定された Accept ヘッダー)
<ArrayOfDemo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/XXX.WebAPI"><Demo><Y>2</Y></Demo><Demo><Y>0</Y></Demo><Demo><Y>1</Y></Demo></ArrayOfDemo>
JSON (application/json に設定された Accept ヘッダー)
[{"X":3,"Y":2},{"X":3,"Y":0},{"X":3,"Y":1}]
私の質問は非常に単純です: X 変数が XML バージョンでシリアル化されないのはなぜですか (読み取り専用プロパティがシリアル化されていると思いました) 、さらに重要なのは、両方の場合でName
プロパティ (書き込み可能) がシリアル化されないのはなぜですか??
私が期待したようにこれを機能させるための代替手段は何ですか?
編集: 私は WebAPI コンテキストにいることに注意してください! デフォルトでは、XmlSerializer は自動的に XmlMediaTypeFormatter に設定され、JSONSerializer は JsonMediaTypeFormatter に設定されます。