经过一番争论之后,我终于让我的Json结果在我的web api中为具有关联的类正常工作了:
public string GetAll()
{
var order =_repository.GetAll();
var settings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return JsonConvert.SerializeObject(order, settings);
}
但是当我在浏览器中或小提琴手中进行测试时,而不是像下面这样典型的东西:
(一)
"Books":
[
{
"Id": "1",
"Name": "Book1",
"Authors":
[
{
.......
}
]
}
]
(B)我明白了:
"[{\"Id\":1,\ "姓名\":\"Book1\ ",\ "作者\":[{\"Id\":1,\"PersonId\":1,\"Person\":null,\"Books\":[{\"Id\":3,\ "姓名\":\"Book3\ ",\ "作者\":[{\"Id\":4,\"PersonId\":4,\"Person\":null,\"Books\":[{\"Id\":2,\ "姓名\":\"Book2\ ",\ "作者\":[{\"Id\":2,\"PersonId\ "。.....
有人能告诉我怎样才能把它格式化成上面的A吗?
谢谢
更新:
顺便说一句,格式化。缩进使情况变得更糟:
“[\r\n{\r\n \”Id\“:1,\r\n \”Name\“:\”Book1\“,\r\n \“Authors\”:[\r\n{\r\n \”Id“:1、\r\n \”PersonId\“:1,\r\n \\”Person\“:{\r\n \“Id\”:1,\r\n\r\n \”FirstName\“:\”John\“,\r\n \LastName\”:\“Doe\”\r\n},\r\n”\“书籍\”:[\r\n{\r\n \“Id\”:3,\r\n \“名称\”:\“Book3 \”,\r\n \”作者\“:[\r\n\r\n{\r\n \”Id\“:4,\r\n\r\n”个人\“:{\r\n\r\n \”Id“:4、\r\n \”名字\“:\”朱莉\“,\r\n
传统的方法是,API控制器返回HttpResponseMessage
或集合对象,但不返回已经序列化的对象。MediaTypeFormatter
对象将为您解决这一问题。
看起来正在发生的事情是,您的控制器正在返回一个字符串,然后将其转换为JSON表示形式(因为JSON的媒体类型格式化程序
)。尝试更改控制器以仅返回对象集合(不将其序列化为字符串),它应该适合您。
设置。格式化=格式化。缩进;
只是好奇...您使用 JsonMediaType 格式化程序来处理编写响应的任何原因?...我看到你正在将其显式序列化为json...
我认为这里的问题是JSON被序列化了两次,一次由您序列化,另一次由WebAPI序列化。删除序列化,一切都应该正常。