【问题标题】:Entity Framework outputs XML instead of JSON实体框架输出 XML 而不是 JSON
【发布时间】:2014-03-18 01:02:59
【问题描述】:

在我的控制器类中,我有很多方法可以输出格式正确的 JSON 数据。它们都执行数据库查询。 例如

// GET api/User
public IEnumerable<Object> GetUsers()
{
    var query = from user in db.Users
                orderby user.Name
                select new { Name = user.Name};

    return query.AsEnumerable<Object>();
}

现在我想返回我的一个类的属性。

public IEnumerable<Object> GetProperties()
{
    return typeof(MyClass)
        .GetProperties(BindingFlags.Public | BindingFlags.Instance)
        .Select(p => p.Name).ToList();
}

然而,不是输出 JSON 实体框架给了我一些类似的 XML

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <string>Property1</string>
    <string>Property2</string>
</ArrayOfstring>

我尝试在控制器方法中转换输出。

public string GetProperties()
{
    var results = typeof(ComplexInfo)
        .GetProperties(BindingFlags.Public | BindingFlags.Instance)
        .Select(p => p.Name).ToList();
    return JsonConvert.SerializeObject(results, Formatting.Indented,
        new JsonSerializerSettings {
            PreserveReferencesHandling = PreserveReferencesHandling.Objects
        });
}

很遗憾,它仍在输出 XML。

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">[
  "Property1",
  "Property2",
]</string>

如何确保从控制器中检索 JSON 对象?

【问题讨论】:

  • 你在使用 web-api 吗?
  • 您能否为实际请求显示您的代码。还有你总是想返回 json 吗?
  • @Explic-请检查我的答案。

标签: asp.net-mvc json entity-framework xml-serialization xmlserializer


【解决方案1】:

我的 web api 也遇到了同样的问题。解决方案是,您必须从 WebApiConfig 中删除 XmlFormatter。

 public static class WebApiConfig
 {
  public static void Register(HttpConfiguration config)
  {
     config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

       var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.
      FirstOrDefault(t => t.MediaType ==      "application/xml");
    config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
 }
}

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多