我有以下代码:
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级数组。答案 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无法转换它。
可能会抛出一个异常,但你没有抓住它,因此,它表现出像行为一样的“回归”。