2011-05-09 23 views
0

好的,我知道我必須缺少一些簡單的東西。C#ASP.NET Web服務 - 嘗試反序列化JSON並獲得一個空對象

感謝您的幫助!

[編輯,以澄清]

我遇到的問題是,JSON輸入沒有被正確或反序列化的東西,並給了我一個空的XML結果。我想要XML格式的輸出,我只是不希望它是空白的。

該代碼是我的實際代碼的簡化版本。在我的真實代碼中,我從另一個網站撤回了JSON,並且我試圖解析它並將其返回到XML soap請求中。

爲了簡化事情,我把JSON字符串作爲示例硬編碼。

<?xml version="1.0" encoding="utf-8" ?> 
    <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="my.soap" /> 
+0

您是否嘗試過使用調試器來查看您的JSON URL格式是否正確,或者查看正在返回的實際JSON數據。我使用[Web Development Helper](http://projects.nikhilk.net/WebDevHelper),但還有其他幾個。 – WEFX 2011-05-09 17:53:37

+0

我必須檢查一下,看看它是否有幫助。我以前曾經查找過一些調試工具,但沒有一個選項可以直接使用。我一直在使用記事本來創建這個Web服務,這限制了我的調試選項。我應該看看我是否可以轉移到Visual Web Developer Express。 – Doug 2011-05-09 18:00:20

+0

@ user745588:格式正確,我使用在線[JSON驗證器](http://jsonformatter.curiousconcept.com/)進行了檢查。問題是你的類不包含名爲'PropertySet'的**屬性**(參見[答案](http://stackoverflow.com/questions/5940528/c-asp-net-web-service-trying -to-deserialize-json-and-getting-an-empty-object/5940709#5940709))。 – Groo 2011-05-09 18:22:31

回答

1

您的JSON字符串表示具有名爲ResultSet的屬性的對象,其中包含嵌套的數據。

注意一個JSON之間的差別序列的ResultSet

{ 
    "Query": "ibm", 
    "Result": [ ... ] 
}

而一個JSON序列對象包含一個結果

{ 
    "ResultSet": 
    { 
     "Query": "ibm", 
     "Result": [ ... ] 
    } 
}

換句話說,它會工作,如果你從輸入字符串中省略ResultSet

string json = @"{"Query":"ibm","Result":[ ... ]}"; 

或者,如果你反序列化串入其中有一個名爲ResultSet屬性的類:

public class ResultSetWrapper 
{ 
    public ResultSet ResultSet; 
} 

在這種情況下你將需要使用:

return serializer.Deserialize<ResultSetWrapper>(json); 

注意[Serializable]屬性無關與XML序列化有關,並且不需要。要控制XmlSerializer的輸出,請使用System.Xml.Serialization命名空間中的屬性。

+0

工作。謝謝!我知道這一定很簡單! – Doug 2011-05-09 18:24:32

0

嘗試添加[ScriptMethod(ResponseFormat = ResponseFormat.Json)]像這樣將WebMethod下:

[WebService(Namespace="my.soap")] 
public class StockQuote : WebService 
{ 

    [WebMethod(Description="",EnableSession=false)] 
    public ResultSet IBM() 
    { 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    string json = "{\"ResultSet\":{\"Query\":\"ibm\",\"Result\":[{\"symbol\":\"IBM\",\"name\": \"International Business Machines Corp.\",\"exch\": \"NYQ\",\"type\": \"S\",\"exchDisp\":\"NYSE\",\"typeDisp\":\"Equity\"},{\"symbol\":\"IBM.F\",\"name\": \"IBM\",\"exch\": \"FRA\",\"type\": \"S\",\"exchDisp\":\"Frankfurt\",\"typeDisp\":\"Equity\"},{\"symbol\":\"IBM.DE\",\"name\": \"IBM\",\"exch\": \"GER\",\"type\": \"S\",\"exchDisp\":\"XETRA\",\"typeDisp\":\"Equity\"},{\"symbol\":\"^AXI\",\"name\": \"Stlmt ID - NASDAQ OMX Alpha IBM\",\"exch\": \"NAS\",\"type\": \"I\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Index\"},{\"symbol\":\"^IVSPY\",\"name\": \"NASDAQ OMX Alpha IBM vs. SPY\",\"exch\": \"NAS\",\"type\": \"I\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Index\"},{\"symbol\":\"IBMSX\",\"name\": \"Invesco Multi-Sector B\",\"exch\": \"NAS\",\"type\": \"M\",\"exchDisp\":\"NASDAQ\",\"typeDisp\":\"Fund\"},{\"symbol\":\"IBM.BE\",\"name\": \"IBM\",\"exch\": \"BER\",\"type\": \"S\",\"exchDisp\":\"Berlin\",\"typeDisp\":\"Equity\"},{\"symbol\":\"IBM.SG\",\"name\": \"IBM\",\"exch\": \"STU\",\"type\": \"S\",\"exchDisp\":\"Stuttgart\",\"typeDisp\":\"Equity\"},{\"symbol\":\"IBM.BA\",\"name\": \"International Business Machines Corp.\",\"exch\": \"BUE\",\"type\": \"S\",\"exchDisp\":\"Buenos Aires\",\"typeDisp\":\"Equity\"},{\"symbol\":\"IBM.L\",\"name\": \"International Business Machines Corp.\",\"exch\": \"LSE\",\"type\": \"S\",\"exchDisp\":\"London\",\"typeDisp\":\"Equity\"}]}}"; 
    return serializer.Deserialize<ResultSet>(json); 
    } 
} 

[Serializable] 
public class ResultSet 
{ 
    public string Query; 
    public ResSet[] Result; 
} 

[Serializable] 
public class ResSet 
{ 
    public string symbol; 
    public string name; 
    public string exch; 
    public string type; 
    public string exchDisp; 
    public string typeDisp; 
} 

我發現了以下通過Web服務的格式的對象,而不是返回

[WebMethod(Description="",EnableSession=false)] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
+0

這給了我一個編譯錯誤。 在任何情況下,我還是希望我的回答是XML,我的問題是,我無法反序列化JSON的把它變成一個XML響應。 – Doug 2011-05-09 17:57:35

0

您的Web服務尚未配置爲輸出JSON,它是爲XML設置的。看到這個SO後如何設置它。

+0

我想讓Web服務返回XML,但它正在處理JSON數據,但沒有正確執行。這是我正在嘗試修復的部分。 – Doug 2011-05-09 17:55:08

相關問題