我正在使用webApi 2,我使用EF 6(DB-First)作为数据访问。 我的* .edmx文件中有很多实体,我想将它们用作webApi方法的返回类型。
当我使用默认设置时,输出由XML Serializer序列化,但是当我通过添加这些行(到WebApiConfig.cs
)将默认序列化器更改为Json Serializer时:
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
它只返回Id : "1"
。我也试过这些线:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.Remove(config.Formatters.XmlFormatter);
它有相同的结果。
对我来说唯一可行的方法是使用JavaScriptSerializer
。但它使我的WebApi对其他开发人员来说无法预测,因为它只返回String
个值。我以这种方式使用JavaScriptSerializer
:
public string Method(){
JavaScriptSerializer js = new JavaScriptSerializer();
// ....
return js.Serialize(Datas);}
是否有任何适用的方法可以在WebApi 2中自动将EF Object序列化为Json?
答案 0 :(得分:0)
GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
这两行明确表示无论您的Web API在响应中发送什么,它都将始终采用Json格式类型。
它只返回Id:“1”
为什么不呢?它是一个有效的Json。
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
这两者在当前背景下无关紧要。
我正在以这种方式使用JavaScriptSerializer:
Serialize总是只给你一个字符串。
是否有任何适用的方法可以在WebApi 2中自动将EF Object序列化为Json?
将您的返回类型设置为EF对象类型。并将WEB API媒体类型格式化为Json。或者让返回类型动态如果您不想指定并在正文中返回您想要的任何类型的对象.Web API将为您提供Json格式