我有一些不完整的JSON有效负载(例如,来自中间传输失败的HTTP连接)。下载的部分有效,但下载可能随时中断。
使用Json.NET,如何推断其余的JSON有效负载?
。
。
。
开玩笑吧。
我真正想要的是(使用Json.NET)尽可能地将我拥有的块转换为有效的JSON。
Json有效载荷的格式先验未知。
这是一个破碎的Json的例子 - 在阅读时注意你的步骤,它突然结束:
var broken = @"[
{'key':'value'},
{'Tables': [
{
'TableName': 'Table_0',
'Columns': [
{
'ColumnName': 'Enabled',
'DataType': 'String',
}
],
'Rows': [
[
'False',
'getuser'
";
答案 0 :(得分:2)
每当我需要使用Json.NET获得低级别时,我最终都会使用流读者/编写者。
原来JsonTextWriter
有一个魔法属性AutoCompleteOnClose
可以添加任何等待的' '结束令牌'当作家关闭时。
var broken = @"[
{'key':'value'},
{'Tables': [
{
'TableName': 'Table_0',
'Columns': [
{
'ColumnName': 'Enabled',
'DataType': 'String',
}
],
'Rows': [
[
'False',
'getuser',
{'fdsa':
";
using (var sw = new StringWriter())
{
var wr = new JsonTextWriter(sw)
{
AutoCompleteOnClose = true, //simple - just ask the writer to fill in any missing closing tokens
Formatting = Newtonsoft.Json.Formatting.Indented
};
using (wr)
{
using (var rdr = new JsonTextReader(new StringReader(broken)) { CloseInput = true })
{
try
{
wr.WriteToken(rdr);
}
catch { /* swallow the read error and keep on trucking */ }
}
} //json writer is closed now
Console.WriteLine(sw.ToString());
}
这是它产生的输出:
[
{
"key": "value"
},
{
"Tables": [
{
"TableName": "Table_0",
"Columns": [
{
"ColumnName": "Enabled",
"DataType": "String"
}
],
"Rows": [
[
"False",
"getuser",
{
"fdsa": null
}
]
]
}
]
}
]