0

我有以下代码:

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 谢谢。

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

Newtonsoft.Json.JsonSerializationException:完成反序列化对象后在 JSON 字符串中找到的附加文本。在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) 在 c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 177 at Newtonsoft .Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) in c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonSerializer.cs:line 711 at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader , 在 c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonSerializer.cs 中键入 objectType):Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) 在 c 中的第 663 行:

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

EDIT2:我可能完全错了。所以我会问一个更简单的问题。我怎么能做一个“奇数”数组的foreach,然后foreach它的子数组?赔率的路径是:["d"]["oddsdata"]["back"]["E-1-2-0-0-0"]["odds"]。我还没有找到模式超过 2 级数组的示例代码。

4

2 回答 2

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);
}
于 2013-08-03T15:35:06.527 回答
0

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

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

可能引发了异常,但您没有捕获它,因此,它表现出类似“返回”的行为。

于 2013-08-03T08:30:58.623 回答