C# 使用FileStream的额外字节(或者看起来是这样)

C# 使用FileStream的额外字节(或者看起来是这样),c#,filestream,C#,Filestream,我正在将一些JSON直接写入一个文件,稍后再读取该文件。然后使用newton将JSON反序列化为一个对象 我最初是这样写的,效果很好: using (var sw = File.CreateText(jsonFile)) { sw.Write(content); } 然后我进入了比赛状态,我被告知改走这条路线 using (var fs = new FileStream(jsonFile, FileMode.Open, FileAccess.Write, FileShare.R

我正在将一些JSON直接写入一个文件,稍后再读取该文件。然后使用newton将JSON反序列化为一个对象

我最初是这样写的,效果很好:

using (var sw = File.CreateText(jsonFile))
{
    sw.Write(content);
}
然后我进入了比赛状态,我被告知改走这条路线

using (var fs = new FileStream(jsonFile, FileMode.Open, FileAccess.Write,
    FileShare.ReadWrite))
{
    using (var sr = new StreamWriter(fs))
    {
        sr.Write(content);
    }
}
但是当反序列化JSON时,我得到了以下消息

Newtonsoft.Json.JsonReaderException:在读完Json内容后遇到的其他文本:u。路径“”

当我将编码添加到
StreamWriter
(UTF8)时,我得到了相同的消息,但不同的字符

因此,作为一条评论中的建议,我尝试使用streamwriter的编码来删除BOM

var utf8WithoutBom = new System.Text.UTF8Encoding(false);
然后将其添加到streamwriter。返回了相同的错误,但这次该字符为空

使用jsonlint编写的JSON(内容)使用上述两种方法进行正确验证


有人知道为什么第二种方法(使用
FileStream
)不起作用吗?如果是这样的话,你对我应该做什么有什么建议吗?

可以再次编辑并向我们显示JSonfilet额外的字节可能是BOM字符,将文件保存为UTF-8,不带BOM,看看你是否可以读取json。在这种情况下,FileShare.ReadWrite不是个好主意吗。您的意思是,当您执行相同操作时,另一个进程可以打开该文件并对其进行写入。FileShare.ReadWrite不正确。它允许两个线程/程序同时写入文件。结果是他们的输出随机混乱,没有人能理解。您需要调试代码以查找线程错误,而不是试图解决它。FileMode.Open不会删除现有文件内容。因此,如果新字符串比现有文件内容短,那么文件中将有剩余字节,这些剩余字节可能会触发解析器错误。