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负载(比如说,来自于一个中途传输失败的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'
";

每当我需要使用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”对象的外观,您可以将其传递给类似序列化程序/解析器的对象,并将其余部分保留为默认值。更新的问题。格式可以是任何格式。看起来有点像。