json.net DeserializeObject

时间:2013-08-03 05:46:37

标签: c# json json.net deserialization

我有以下代码:

string code = client.DownloadString("http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat");
DataSet data = JsonConvert.DeserializeObject<DataSet>(code.Substring(3, code.Length - 6));
textBox1.Text += "1";

但它会在第二行停止,就像返回一样 - 它不会在文本框中写入1。 我做错了什么?

这里用结构重写:http://pastebin.com/xZAhjU8w 感谢。

编辑:使用了try-catch,它的例外是:

  

Newtonsoft.Json.JsonSerializationException:完成反序列化对象后在JSON字符串中找到的附加文本。      at Newtonoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType,Boolean checkAdditionalContent)在c:\ Temp \ Json \ Working \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:第177行      at Newtonoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType)在c:\ Temp \ Json \ Working \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ JsonSerializer.cs:第711行      at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader,Type objectType)在c:\ Temp \ Json \ Working \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ JsonSerializer.cs:第663行      at Newtonoft.Json.JsonConvert.DeserializeObject(String value,Type type,JsonSerializerSettings settings)in c:\ Temp \ Json \ Working \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ JsonConvert.cs:line 797      at Newtonoft.Json.JsonConvert.DeserializeObject [T](字符串值,JsonSerializerSettings设置)在c:\ Temp \ Json \ Working \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ JsonConvert.cs:第757行      at Newtonoft.Json.JsonConvert.DeserializeObject [T](字符串值)在c:\ Temp \ Json \ Working \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ JsonConvert.cs:第694行      at oddsreader.Form1.Form1_Load(Object sender,EventArgs e)位于c:\ Users \ zuz \ Documents \ Visual Studio 2012 \ Projects \ oddsreader \ oddsreader \ Form1.cs:第692行

当我尝试一些在线json验证器时,他们返回的字符串是有效的。它可能有什么问题?

编辑2:我可能完全错了。所以我会问一个更简单的问题。我怎么能做一个&#34;赔率&#34;数组,然后foreach它的子阵列?赔率的途径是:[&#34; d&#34;] [&#34; oddsdata&#34;] [&#34;返回&#34;] [&#34; E-1-2-0-0 -0&#34;] [&#34;赔率&#34]。我还没有找到一个模式的示例代码而不是2级数组。

2 个答案:

答案 0 :(得分:1)

您的问题不在于字符串,而是在转换为'DataSet'。这对我来说很好:

static void Main(string[] args)
{
    WebClient client = new WebClient();
    string code = client.DownloadString("http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat");
    client.Dispose();

    code = code.Replace("-|-", string.Empty);

    JObject json = JsonConvert.DeserializeObject<JObject>(code);

    int one = (int)json["d"]["bt"];

    Debug.Assert(one == 1);
}

答案 1 :(得分:0)

似乎JsonConvert无法对您传入的参数执行DeserializeObject

也就是说(3, code.Length - 6)可能没有给你一个有效的json字符串,因此JsonConvert无法转换它。

可能会抛出一个异常,但你没有抓住它,因此,它表现出像行为一样的“回归”。