【问题标题】:WCF return type : JsonResultWCF 返回类型:JsonResult
【发布时间】:2014-11-25 12:33:47
【问题描述】:

我希望服务以以下 JSON 格式(不是字符串)返回数据:

{{name:"ABC"},{Id:"ABC123"}}

我正在尝试从 WCF 函数返回 JsonResult。我创建了一个IList<Dictionary> 来存储从数据库中获取的数据,然后我使用Controller 类的Json() 函数将其转换为JsonResult。在使用 Fiddler 进行测试时,我希望从该服务接收 JSON 数据,但我收到了 504 结果:

"[Fiddler] ReadResponse() 失败:服务器没有返回响应 对于这个请求。服务器返回 0 个字节。”

可能是什么原因?

【问题讨论】:

  • 能否添加返回 JSON 响应的 WCF 方法?
  • 我会首先考虑将 IList 以外的内容序列化到结果中。如果此数据曾经被 .NET 使用过或需要反序列化,那么应该将 JSON 转换回什么类型(因为无法从 IList 推断出类型)?考虑一个字典数组。此外,更多代码肯定会有所帮助。
  • 你确定你的意思是 WCF 吗?控制器和 JsonResult 是 WebApi/MCV 的东西,而不是 WCF...

标签: c# json wcf


【解决方案1】:

为什么在 wcf 中使用 mvc 的 JsonResult,这是必需的吗?您可以返回 Json.NET 的 JObject 对象而不是 JsonResult,或者像这样的动态对象:

public dynamic GetData()
{
     dynamic objReturn = new ExpandoObject();
     objReturn.Id = "ABC123";
     objReturn.name = "ABC";
     JavaScriptSerializer objSerializer = new JavaScriptSerializer();
     return objSerializer.Serialize(objReturn);
}

【讨论】:

  • 您是否怀疑使用 JsonResult 类型会导致 OP 出现问题?似乎这可能不是答案。
  • 是的,我希望输出为 JSON 格式。然而,这些值是从动态数据库中检索的,所以我不能使用 [DataMember] 或 [DataContract](因为对象是动态创建的)。
【解决方案2】:

设置跟踪日志,您可以在 traceviewer 中打开该日志以了解有关错误的更多信息。按照以下 MSDN 文章 http://msdn.microsoft.com/en-us/library/ms733025%28v=vs.110%29.aspx 中所示更改配置文件

不确定这是否有帮助,但是当我返回一个对象或列表时,我创建了一个我想要返回的类型的对象,确保我已经包含 DataContract 和 DataMember 属性来序列化它。例如:

[DataContract]
public class User
{      
    [DataMember(Name="email")]
    public string EmailAddress { get; set; }


    [DataMember(Name = "name")]
    public string Name { get; set; }

创建服务接口,返回用户对象列表

    [WebGet(UriTemplate = "/users", ResponseFormat = WebMessageFormat.Json)]
    List<User> GetUsers(); 

实现接口,当你返回列表时,它会透明地序列化为 JSON

public List<User> GetUsers()
{
    List<User> userList = new List<User>();   
    //Create your user list here

    return userList;
}

【讨论】:

  • 我不能使用 DataContract 和 DataMember,因为对象是从数据库动态创建的,这就是我使用 Dictionary 的原因。但是返回字典会给出 {{key="name":value="ABC"}} 格式的结果,我想将其转换为 {{name:"ABC"}} 格式。
猜你喜欢
  • 2016-02-10
  • 2014-06-27
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
相关资源
最近更新 更多