Tam*_*Dey 84 c# serialization asp.net-web-api
我正在使用ASP.NET MVC Web API,我遇到了这个错误:
'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .
我的控制器是:
public Employee GetEmployees()
{
Employee employees = db.Employees.First();
return employees;
}
Run Code Online (Sandbox Code Playgroud)
为什么我收到这个错误?
Zan*_*ane 118
对我来说这是循环引用的问题.
接受的答案对我不起作用,因为它只改变了JSON格式化程序的行为,但是当我从浏览器调用服务时,我得到了XML.
为了解决这个问题,我关闭了XML并强制只返回JSON.
在Global.asax文件中,将以下行放在Application_Start方法的顶部:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
Run Code Online (Sandbox Code Playgroud)
现在只返回JSON结果.如果您需要XML结果,则需要找到不同的解决方案.
Jul*_*eda 43
在您的global.asax文件中,在Application_start()方法中添加以下行:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
Run Code Online (Sandbox Code Playgroud)
我希望能帮到你!
tay*_*yen 29
我遇到了同样的问题.我解决了它.我将默认构造函数放到DTO类中.
例如:
public class User
{
public User()
{
}
}
Run Code Online (Sandbox Code Playgroud)
希望它能和你合作!
Sad*_*aie 21
把它放在构造函数中.希望这解决问题:
public MyController()
{
db.Configuration.ProxyCreationEnabled = false;
}
Run Code Online (Sandbox Code Playgroud)
Ray*_*zer 16
我找到了两个解决方案.第一个也是最容易实现的是将任何IEnumerables,ICollections更改为List类型.WebAPI可以序列化这些对象,但是它不能序列化接口类型.
public class Store
{
[StringLength(5)]
public string Zip5 { get; set; }
public virtual List<StoreReport> StoreReports { get; set; } //use a list here
}
Run Code Online (Sandbox Code Playgroud)
另一个选项是不使用本机JSON序列化程序并在WebApi配置的Register方法中运行此覆盖:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
Run Code Online (Sandbox Code Playgroud)
** 从客户端从请求 web api/wcf/... 调用时会发生此错误,但作为副作用,您需要通过 include 关键字包含依赖关系。**
public CustomerPortalContext()
: base("Name=CustomerPortalContext")
{
base.Configuration.ProxyCreationEnabled = false;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
89314 次 |
最近记录: |