Json.net-如何;“固定”;不完整的JSON?
我有一些不完整的JSON负载(比如说,来自于一个中途传输失败的HTTP连接)。下载的部分是有效的,但下载可以在任何时候中断 使用Json.NET,如何推断Json负载的其余部分?Json.net-如何;“固定”;不完整的JSON?,.net,json,json.net,.net,Json,Json.net,我有一些不完整的JSON负载(比如说,来自于一个中途传输失败的HTTP连接)。下载的部分是有效的,但下载可以在任何时候中断 使用Json.NET,如何推断Json负载的其余部分? . . . 好吧,开个玩笑 我真正想要的是(使用Json.NET)尽可能地将我拥有的块转换成有效的Json Json负载的格式是未知的 下面是一个断开的Json示例 -阅读时要注意步子,它会突然结束: var broken = @"[ {'key':'value'}, {'Tables': [
.
.
.
好吧,开个玩笑 我真正想要的是(使用Json.NET)尽可能地将我拥有的块转换成有效的Json Json负载的格式是未知的 下面是一个断开的Json示例
-阅读时要注意步子,它会突然结束:
var broken = @"[
{'key':'value'},
{'Tables': [
{
'TableName': 'Table_0',
'Columns': [
{
'ColumnName': 'Enabled',
'DataType': 'String',
}
],
'Rows': [
[
'False',
'getuser'
";
每当我需要使用Json.NET进行低级操作时,我都会使用流阅读器/写入器 原来
JsonTextWriter
有一个神奇的属性AutoCompleteOnClose
,它可以在writer关闭时添加任何“挂起的”结束标记
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
}
]
]
}
]
}
]
每当我需要使用Json.NET进行低级操作时,我都会使用流阅读器/写入器 原来
JsonTextWriter
有一个神奇的属性AutoCompleteOnClose
,它可以在writer关闭时添加任何“挂起的”结束标记
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
}
]
]
}
]
}
]
我不熟悉Json.net,但您的问题将取决于您是否知道预期的Json结构。如果您确实知道“Tables”对象的外观,您可以将其传递给类似序列化程序/解析器的对象,并将其余部分保留为默认值。更新的问题。格式可以是任何格式。看起来有点像。我不熟悉Json.net,但您的问题将取决于您是否知道预期的Json结构。如果您确实知道“Tables”对象的外观,您可以将其传递给类似序列化程序/解析器的对象,并将其余部分保留为默认值。更新的问题。格式可以是任何格式。看起来有点像。