我试图在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)
<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 的标头)
[{"X":3,"Y":2},{"X":3,"Y":0},{"X":3,"Y":1}]
我的问题很简单:为什么 X 变量没有用 XML 版本序列化(我认为只读属性被序列化了),更重要的是,为什么在这两种情况下Name
属性(可写)都没有序列化?
有什么替代方法可以使这项工作像我预期的那样?
编辑:请注意,我在 WebAPI 上下文中!默认情况下,XmlSerializer 自动设置为 XmlMediaTypeFormatter,JSONSerializer 自动设置为 JsonMediaTypeFormatter