2

希望有人可以伸出援助之手...我正在尝试使用下面的示例将 JSON 转换为 DataSet,但是遇到了问题。我已经验证 JSON 是正确的,使用了 Kent 建议的方法。感谢您的时间和帮助!

以下是我的 JSON:

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

这是我的网络服务 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:“错误:Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:S.路径'',第0行,位置0......”

4

2 回答 2

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));

如果这不能解决您的问题,请告诉我。

于 2012-11-28T10:30:03.477 回答
-1

通过更新我的 c# webservice 方法解决了这个问题。

传入的 JSON 如下所示:

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

c# webservice 方法如下所示:

[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 + "!";
            }
        }
于 2012-11-30T02:48:49.300 回答