2

誰かが手を貸してくれることを願っています...以下の例を使用してJSONをDataSetに変換しようとしていますが、問題があります。JSON が正しいことを検証し、Kent が提案した方法を使用しました。お時間をいただきありがとうございます。

以下は私の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 + "!";
            }
        }

これが私のエラー出力の 1 つです: 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#Webサービスメソッドを更新して解決しました。

渡されるJSONは次のようになります。

'{"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 + "!";
            }
        }
于 2012-11-30T02:48:49.300 に答える