我正在寻找一种反序列化部分 json 块的好方法。我正在使用 Json.Net。我尝试使用 JsonTextReader 遍历,直到找到我正在寻找的块并将其传递给 JsonSerializer 但它似乎试图从流的开头反序列化。除了接近末尾的“数据”之外,我不关心任何 json。
"jquery":[
[0, 1, "call", ["#form-t3_iqhw5ili"]],
[1, 2, "attr", "find"],
[2, 3, "call", [".status"]],
[3, 4, "attr", "hide"],
[4, 5, "call", []],
[5, 6, "attr", "html"],
[6, 7, "call", [""]],
[7, 8, "attr", "end"],
[8, 9, "call", []],
[1, 10, "attr", "find"],
[10, 11, "call", ["textarea"]],
[11, 12, "attr", "attr"],
[12, 13, "call", ["rows", 3]],
[13, 14, "attr", "html"],
[14, 15, "call", [""]],
[15, 16, "attr", "val"],
[16, 17, "call", [""]],
[0, 18, "attr", "insert_things"],
[18, 19, "call", [
[{
"data":{
"content":"<div class=\"thing id-t1_c25u9i3 even odd comment \" onclick=\"click_thing(this)\"><p class=\"parent\"><a name=\"c25u9i3\" ></a></p><div class=\"midcol likes\" ><div class=\"arrow upmod\" onclick=\"$(this).vote('f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0', null, event)\" ></div><div class=\"arrow down\" onclick=\"$(this).vote('f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0', null, event)\" ></div></div><div class=\"entry likes\"><div class=\"collapsed\" style='display:none'><a href=\"#\" class=\"expand\" onclick=\"return showcomment(this)\">[+]</a><a href=\"http://www.reddit.com/user/KerrickLong\" class=\"author gray submitter id-t2_4appr\" >KerrickLong</a><span class=\"userattrs\"> [<a class=\"submitter\" title=\"submitter\" href=\"/r/MostlyHarmless/comments/iqhw5/changelog_mostly_harmless_v041_released/\">S</a>]</span> <span class=\"score dislikes\">-1 points</span><span class=\"score unvoted\">0 points</span><span class=\"score likes\">1 point</span> <time title=\"Fri Jul 15 16:57:16 2011 GMT\" datetime=\"2011-07-15T16:57:16.209277+00:00\">91 milliseconds</time> ago <a href=\"#\" class=\"expand\" onclick=\"return showcomment(this)\">(0 children)</a></div><div class=\"noncollapsed\" ><p class=\"tagline\"><a href=\"#\" class=\"expand\" onclick=\"return hidecomment(this)\">[–]</a><a href=\"http://www.reddit.com/user/KerrickLong\" class=\"author submitter id-t2_4appr\" >KerrickLong</a><span class=\"userattrs\"> [<a class=\"submitter\" title=\"submitter\" href=\"/r/MostlyHarmless/comments/iqhw5/changelog_mostly_harmless_v041_released/\">S</a>]</span> <span class=\"score dislikes\">-1 points</span><span class=\"score unvoted\">0 points</span><span class=\"score likes\">1 point</span> <time title=\"Fri Jul 15 16:57:16 2011 GMT\" datetime=\"2011-07-15T16:57:16.209277+00:00\">91 milliseconds</time> ago</p><form action=\"#\" class=\"usertext\" onsubmit=\"return post_form(this, 'editusertext')\" id=\"form-t1_c25u9i38va\"><input type=\"hidden\" name=\"thing_id\" value=\"t1_c25u9i3\"/><div class=\"usertext-body\"><div class=\"md\"><p>Hey!</p><p><strong><a href=\"http://www.google.com/\">search!</a></strong></p></div>\n</div><div class=\"usertext-edit\" style=\"display: none\"><div><textarea rows=\"1\" cols=\"1\" name=\"text\" >test comment</textarea></div><div class=\"bottom-area\"><span class=\"help-toggle toggle\" style=\"display: none\"><a class=\"option active \" href=\"#\" tabindex=\"100\" onclick=\"return toggle(this, helpon, helpoff)\" >formatting help</a><a class=\"option \" href=\"#\">hide help</a></span><span class=\"error TOO_LONG field-text\" style=\"display:none\"></span><span class=\"error RATELIMIT field-ratelimit\" style=\"display:none\"></span><span class=\"error NO_TEXT field-text\" style=\"display:none\"></span><span class=\"error TOO_OLD field-parent\" style=\"display:none\"></span><span class=\"error DELETED_COMMENT field-parent\" style=\"display:none\"></span><span class=\"error DELETED_LINK field-parent\" style=\"display:none\"></span><span class=\"error USER_BLOCKED field-parent\" style=\"display:none\"></span><div class=\"usertext-buttons\"><button type=\"submit\" onclick=\"\" class=\"save\" style='display:none'>save</button><button type=\"button\" onclick=\"cancel_usertext(this)\" class=\"cancel\" style='display:none'>cancel</button><span class=\"status\"></span></div></div><table class=\"markhelp md\" style=\"display: none\"><tr style=\"background-color: #ffff99; text-align: center\"><td><em>you type:</em></td><td><em>you see:</em></td></tr><tr><td>*italics*</td><td><em>italics</em></td></tr><tr><td>**bold**</td><td><b>bold</b></td></tr><tr><td>[reddit!](http://reddit.com)</td><td><a href=\"http://reddit.com\">reddit!</a></td></tr><tr><td>* item 1<br/>* item 2<br/>* item 3</td><td><ul><li>item 1</li><li>item 2</li><li>item 3</li></ul></td></tr><tr><td>> quoted text</td><td><blockquote>quoted text</blockquote></td></tr><tr><td>Lines starting with four spaces<br/>are treated like code:<br/><br/><span class=\"spaces\"> </span>if 1 * 2 < 3:<br/><span class=\"spaces\"> </span>print \"hello, world!\"<br/></td><td>Lines starting with four spaces<br/>are treated like code:<br/><pre>if 1 * 2 < 3:<br/> print \"hello, world!\"</pre></td></tr><tr><td>~~strikethrough~~</td><td><strike>strikethrough</strike></td></tr><tr><td>super^script</td><td>super<sup>script</sup></td></tr></table></div></form><ul class=\"flat-list buttons\"><li class=\"first\"><a href=\"http://www.reddit.com/r/MostlyHarmless/comments/iqhw5/changelog_mostly_harmless_v041_released/c25u9i3\" class=\"bylink\" rel=\"nofollow\" >permalink</a></li><li><a class=\"edit-usertext\" href=\"javascript:void(0)\" onclick=\"return edit_usertext(this)\">edit</a></li><li><form class=\"toggle del-button\" action=\"#\" method=\"get\"><input type=\"hidden\" name=\"executed\" value=\"deleted\"/><span class=\"option active\"><a href=\"#\" onclick=\"return toggle(this)\">delete</a></span><span class=\"option error\">are you sure?  <a href=\"javascript:void(0)\" class=\"yes\" onclick='change_state(this, \"del\", hide_thing)'>yes</a> / <a href=\"javascript:void(0)\" class=\"no\" onclick=\"return toggle(this)\">no</a></span></form></li><li><form action=\"/post/remove\" method=\"post\" class=\"state-button remove-button\"><input type=\"hidden\" name=\"executed\" value=\"removed\" /><span><a href=\"javascript:void(0)\" onclick=\"return change_state(this, 'remove');\">remove</a></span></form></li><li class=\"toggle\"><form method=\"post\" action=\"/post/distinguish\"><input type=\"hidden\" value=\"distinguishing...\" name=\"executed\"/><a href=\"javascript:void(0)\" onclick=\"return toggle_distinguish_span(this)\">distinguish</a><span class=\"option error\">distinguish this?  <a href=\"javascript:void(0)\" onclick=\"return set_distinguish(this, 'yes')\">yes</a> / <a href=\"javascript:void(0)\" onclick=\"return set_distinguish(this, 'no')\">no</a>  / <a class=\"nonbutton\" href=\"/help/moderation#Distinguishing\">help</a> </span></form></li><li><a class=\"\" href=\"javascript:void(0)\" onclick=\"return reply(this)\">reply</a></li></ul></div></div><div class=\"child\" ></div><div class=\"clearleft\"><!--IE6sux--></div></div><div class=\"clearleft\"><!--IE6sux--></div>",
"contentHTML":"<div class=\"md\"><p>Hey!</p><p><strong><a href=\"http://www.google.com/\">search!</a></strong></p></div>",
"contentText":"Hey!\n\n**[search!](http://www.google.com/)**",
"id":"t1_c25u9i3",
"link":"t3_iqhw5",
"parent":"t3_iqhw5",
"replies":""
},
"kind":"t1"
}],
false
]
],
我也有一个数据类:
public class AddCommentData
{
public string content { get; set; }
public string contentHTML { get; set; }
public string contentText { get; set; }
public string id { get; set; }
public string link { get; set; }
public string parent { get; set; }
public string replies { get; set; }
}
这里的最佳实践?
编辑: 我尝试过这样的事情......
var serializer = new JsonSerializer();
var reader = new JsonTextReader(new StringReader(results));
while (reader.Read())
{
if (reader.Value != null)
{
if(reader.TokenType == JsonToken.PropertyName && reader.Value.ToString() == "data")
{
return serializer.Deserialize<AddCommentData>(reader);
}
}
}