ASP.NET WEB API 中自定义对象的序列化 [重复]
Posted
技术标签:
【中文标题】ASP.NET WEB API 中自定义对象的序列化 [重复]【英文标题】:Serialization of custom objects in ASP.NET WEB API [duplicate] 【发布时间】:2015-04-25 23:27:51 【问题描述】:ASP .NET WEB API 新手问题。
我有一个愚蠢的 web api 项目,没有模型,只有一个带有 get 方法的控制器。
get 方法使用专有对象模型 API 从外部数据库检索数据。
public class MyObjectController : ApiController
private static IList<MyObject> list = new List<MyObject>();
private MyObjectCollection GetData()
return MyExternalDB.Query();
// GET api/myobjects
public IEnumerable<MyObject> Get()
MyObjectCollection objcoll = GetData();
IList<MyObject> list = objcoll.Cast<MyObject>().ToList();
return list;
问题: 现在,项目构建没有错误,但是当我尝试通过 IE url api/myobjects 进行调试并将结果下载到 json 时,IE 无法显示“文件无法下载”。
我怀疑该对象未正确序列化为 json。使用包 Web Api Tracing 我可以看到以下异常
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'Project' with type ...
问题
MyObject 不依赖于模型,而是基于在单独的 API 中定义的自定义类型。我是否应该期望序列化程序能够正常工作并将我的对象转换为 json(假设没有自引用循环问题)? 我应该如何处理 MyObject 摆脱自引用属性,以便它可以正确序列化为 json 响应?【问题讨论】:
“我怀疑对象未正确序列化为 json” - 或者,您使用了错误的工具来测试 API。尝试Fiddler 而不是 IE。 【参考方案1】:尝试添加
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html") );
到你的App_Start/WebApiConfig.cs
班级
这应该强制它,但正如评论的那样,您确实应该通过创建适当的请求来测试您的 API。有几个工具:
Postman(Chrome 插件)Fiddler
由于您的应用程序可能会创建请求并指定数据类型并处理它,因此您需要使用上述工具之一进行模拟。
【讨论】:
在遇到 google 的 Advanced REST Client 之后,我停止使用您提到的 2 个(好吧,fiddler 仍可用于其他目的)。 甜,我试试看!以上是关于ASP.NET WEB API 中自定义对象的序列化 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Web API 中为 Json.NET 设置自定义 JsonSerializerSettings?
asp.net中在Gridview中自定义一列操作,应该怎么做?