【发布时间】:2015-09-19 07:09:30
【问题描述】:
我正在提供以这种方式完成的 WebApi 2 端点:
我的控制器很简单:
public IDictionary<MyClass, int> GetMyClasses(string id)
{
Dictionary<MyClasses, int> sample = new Dictionary<MyClasses, int>();
sample.Add(new MyClasses()
{
Property1 = "aaa",
Property2 = 5,
Property3 = 8
},10);
return sample;
}
MyClass的结构是:
public class MyClass
{
string Property1 {get;set;}
int Property2 {get;set;}
int Property3 {get;set;}
}
当我运行我的网络服务时,帮助网页显示预期的输出是:
{ "MyNamespace.MyProject.MyClass": 1 }
另一方面,xml 样本是我想要的(除了我想要 json,而不是 xml):
<ArrayOfKeyValueOfMyClassintl85fHlC_P xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<KeyValueOfMyClassintl85fHlC_P>
<Key xmlns:d3p1="http://schemas.datacontract.org/2004/07/MyNamespace.MyProject.MyClass">
<d3p1:Property1>sample string 4</d3p1:Property1>
<d3p1:Property2>8</d3p1:Property2>
<d3p1:Property3>5</d3p1:Property3>
</Key>
<Value>1</Value>
</KeyValueOfMyClassintl85fHlC_P>
</ArrayOfKeyValueOfMyClassintl85fHlC_P >
我还使用 Postman 运行了端点,它确认返回的值是 WebApi 开箱即用页面预览的值。
为什么 json 是“错误的”而 xml 做得很好(我的意思是包含所有数据)?
更新:
我希望 MyClass 像这样在 json 中序列化:
{
"Property1": "sample string 4",
"Property2": 8,
"Property3": 5
}
这应该是我的字典键的结构,因为它在 xml 表示中。
谢谢
【问题讨论】:
-
您希望这会产生什么样的 JSON?
-
您阐明了您期望 MyClass 如何被序列化,但您如何期望
IDictionary<MyClass,int>被序列化? -
@StriplingWarrior 我写的序列化而不是“MyNamespace.MyProject.MyClass”。你认为它会损坏 json 吗?
-
WebApi 2 uses Json.NET as its JSON formatter。默认情况下 Json.NET can only serialize a dictionary whose keys can be converted to a string。请参阅此处了解解决方法:stackoverflow.com/questions/27332723/…
-
@ff8mania:我希望你能澄清你想要返回值的样子,这样我就可以提供你正在寻找的答案,而不是三个单独的答案和解释你会在什么情况下使用它们。如果你花点时间写出你设想的整个 JSON 对象,你会为我节省很多时间。
标签: c# json xml asp.net-web-api