【问题标题】:Read/Write JSON using System.Text.Json使用 System.Text.Json 读/写 JSON
【发布时间】:2021-05-02 01:21:56
【问题描述】:

我们目前正在使用 NewtwonSoft.json,但出于安全原因需要迁移到 System.Text.JSON。

所以我们是 System.Text.JSON 的新手,并且无法读取以下 JSON 文件。

理想情况下,我们希望阅读并最终将每条记录放在网格中的单独行中,ID、名称和 ContractTypeID 分别为 A、B 和 C 列。更喜欢 VB.net,但谷歌搜索让我们相信 VB.net System.Text.JSON 中不太支持。所以 C# 可以工作。感谢任何可以让我们继续前进的反馈。我们曾尝试使用一个练习 C# 项目,但出现错误:

“System.Text.Json.JsonReaderException: ''0xEF' 是一个无效的值开始。LineNumber: 0 | BytePositionInLine: 0。”在 Reader.Read 行。

var fileName = @"D:\MyFile.json";

byte[] data = System.IO.File.ReadAllBytes(fileName);

Utf8JsonReader reader = new Utf8JsonReader(data);

while (reader.Read())
[
    {
         "ID": "001",
         "Name": "INT SYS CO",
         "ContractTypeID": "CPAF"
    },
    {
         "ID": "002",
         "Name": "PLT",
         "ContractTypeID": "CPFF"
    },
    {
         "ID": "003",
         "Name": "SBAND",
         "ContractTypeID": "CPIF"
    },
    {
         "ID": "004",
         "Name": "SE",
         "ContractTypeID": "CPIF_PI"
    },
    {
         "ID": "005",
         "Name": "SPE",
         "ContractTypeID": "FFP"
    }
]

【问题讨论】:

  • 很明显,文件是用 UTF-8 编码和 BOM 保存的。在没有 BOM 的情况下重新保存它。
  • 我们收到 JSON 文件。我们无法改变它们。我们最近使用 Sytem.Text.Json 的 JsonDocument.Parse 成功读取了 JSON,所以我想我们会朝着这个方向前进。

标签: c# json system.text.json


【解决方案1】:

很明显,文件是用 UTF-8 编码和 BOM 保存的。

如果文件包含 UTF-8 字节顺序标记,请在将字节传递给 Utf8JsonReader 之前将其删除。

ReadOnlySpan<byte> data = File.ReadAllBytes(fileName);

ReadOnlySpan<byte> utf8Bom = new byte[] { 0xEF, 0xBB, 0xBF };

if (data.StartsWith(utf8Bom))
{
    data = data.Slice(utf8Bom.Length);
}

Utf8JsonReader reader = new Utf8JsonReader(data);

documentation 中查看更多信息。

【讨论】:

  • 知道了。谢谢!
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多