使用 System.Text.Json 读取/写入 JSON

mid*_*e11 4 c# json system.text.json

我们当前使用 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())
Run Code Online (Sandbox Code Playgroud)
[
    {
         "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"
    }
]
Run Code Online (Sandbox Code Playgroud)

Ale*_*rov 7

显然,文件是以带有BOM的UTF-8编码保存的。

如果文件包含 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);
Run Code Online (Sandbox Code Playgroud)

请参阅文档中的更多内容。