2014-11-25 208 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