2012-11-27 22 views
1

希望有人可以伸出援助之手......我正嘗試使用下面的示例將JSON轉換爲DataSet,但遇到問題。我已經驗證了JSON是正確的,使用了Kent所建議的方法。感謝您的時間和幫助!JSON到DataSet使用Json.NET

以下是我的JSON:

{"jsonData":[{"item1":"one"},{"item2":"two"}]} 

這裏是我的web服務的C#代碼:

[WebMethod] 
     public string setWorkOrdersUpdated(object jsonData) 
     { 
      try 
      { 
       XmlDocument xd = new XmlDocument(); 
       xd = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonData.ToString()); 
       DataSet ds = new DataSet(); 
       ds.ReadXml(new XmlNodeReader(xd)); 
       return "success"; 
      } 
      catch (Exception e) 
      { 
       return "ERROR: " + e + "!"; 
      } 
     } 

這裏是我的錯誤輸出之一: d:「ERROR:Newtonsoft.Json .JsonReaderException:解析值時遇到意外的字符:S。路徑'',行0,位置0 ...「

回答

0

您使用的是哪個版本?因爲我得到了一個不同的錯誤(Json.net 4.5)。我已經做了以下和異常已經(基本上傳遞根元素名稱)。

編輯:添加了完整代碼

string jsonData = "{\"jsonData\":[{\"item1\":\"one\"},{\"item2\":\"two\"}]}"; 
XmlDocument xd = new XmlDocument(); 
//xd = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonData.ToString()); //Throws exception "This document already has a 'DocumentElement' node." 
xd = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonData.ToString(), "jsonData"); 
DataSet ds = new DataSet(); 
ds.ReadXml(new XmlNodeReader(xd)); 

請讓我知道這是不是解決您的問題。

+0

感謝KEYR ......我想你的建議,但畢竟是在外觀還是通過像下面

JSON不幸的是我收到了與DeserializeXmlNode代碼完全相同的錯誤。我使用Json.Net 3.5版本4.5 – torvictech

+0

我認爲這個問題已經在Json.net 4.5版本中修改了。希望移至4.5並不是對你的限制。 – keyr

+0

我已經下載了最新的Json.Net DLL(版本4.5版本11),使用它與.NET 4.0 ...但仍然得到相同的錯誤。 (這裏是我傳入的字符串:'{「jsonData」:[{「col1」:「result1」,「col2」:「result1」},{「col1」:「result2」,「col2」:「result2 「}}}'你的Json字符串在進行反序列化時如何格式化? – torvictech

-1

用更新我的c#webservice方法解決了它。

'{"data":{"jsonData":[{"id":"1","name":"Alan","url":"http://www.google.com"},{"id":"2","name":"Louis","url":"http://www.yahoo.com"}]}}' 

和C#web服務方法如下所示:

[WebMethod] 
     public string myUpdate(object data) 
     { 
      try 
      { 
       string json = JsonConvert.SerializeObject(data); 
       XmlDocument xd = new XmlDocument(); 
       xd = (XmlDocument)JsonConvert.DeserializeXmlNode(json, "jsonData"); 
       DataSet ds = new DataSet(); 
       ds.ReadXml(new XmlNodeReader(xd)); 
       return "success"; //return ds.Tables[0].Rows[0][2].ToString(); //just to test 
      } 
      catch (Exception e) 
      { 
       return "ERROR: " + e + "!"; 
      } 
     } 
+1

如果你能說出你解決問題的方法比讓用戶理解它更好。 – keyr