2014-11-25 92 views
2

我希望有一个服务于以下JSON格式(而不是字符串)返回数据:WCF返回类型:JsonResult

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

我试图从一个WCF函数返回一个JsonResult。我创建了一个IList<Dictionary>来存储从数据库中获取的数据,然后使用Controller类的Json()函数将其转换为JsonResult。我期待使用招测试时,从该服务接收JSON数据,而不是我收到504结果说:

“[提琴手] ReadResponse()失败:服务器未返回该请求的响应 。服务器返回0字节。“

可能是什么原因?

+2

你可以添加你的WCF方法,返回JSON响应? – 2014-11-25 12:53:13

+0

我会首先考虑序列化除IList之外的其他内容。如果这些数据已被.NET使用或需要反序列化,那么它应该将JSON转换回哪种类型(因为不能从IList中推断出类型)?考虑一下Dictionary的数组。而且,更多的代码肯定会有帮助。 – xDaevax 2014-11-25 14:05:53

+2

你确定你的意思是WCF吗?控制器和JsonResult是WebApi/MCV的东西,而不是WCF ... – 2014-11-25 15:11:54

回答

0

为什么你在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); 
} 
+0

您是否怀疑使用'JsonResult'类型导致OP提出的问题?似乎这可能不是一个答案。 – xDaevax 2014-11-25 14:10:05

+0

是的,我希望输出为JSON格式。而从DB中检索这些值是动态的,因此我不能使用[DataMember]或[DataContract](因为对象是动态创建的)。 – Group1 2014-11-26 06:19:44

0

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

不确定这是否有帮助, 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; 
} 
+0

我无法使用DataContract和DataMember,因为对象是从数据库动态创建的,这就是我使用Dictionary的原因。但是,返回的字典会将{{key =“name”:value =“ABC”}}格式的结果转换为{{name:“ABC”}}格式。 – Group1 2014-11-26 06:24:09