首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用System.Text.Json读写JSON

使用System.Text.Json读写JSON
EN

Stack Overflow用户
提问于 2021-04-30 19:07:59
回答 1查看 1.3K关注 0票数 4

我们目前正在使用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\x BytePositionInLine: 0。“在Reader.Read线上。

代码语言:javascript
复制
var fileName = @"D:\MyFile.json";

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

Utf8JsonReader reader = new Utf8JsonReader(data);

while (reader.Read())
代码语言:javascript
复制
[
    {
         "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"
    }
]
EN

回答 1

Stack Overflow用户

发布于 2021-05-01 17:21:21

显然,该文件是用BOM以UTF-8编码保存的.

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

代码语言:javascript
复制
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);

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67339264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档