我在visual studio中有一个文件,其中包含以下内容:“{”Name“:”Pete“}” 如果我使用以下代码读取文件,则会显示创建一个包含原始值的字符串:
byte[] byteArray = System.IO.File.ReadAllBytes(filePath);
string jsonResponse = System.Text.Encoding.UTF8.GetString(byteArray);
但是,如果我使用以下代码,该字符串实际上与存在的版本不同:
string jsonResponse = "{\"Name\":\"Pete\"}";
为什么呢? (我认为它不同的原因是因为当我将每个版本传递给json反序列化器时,它的行为方式不同)
感谢。
答案 0 :(得分:8)
鉴于你在问题中的最终评论,我怀疑问题是你在文件的开头有一个byte-order mark。请尝试加载这样的文件:
string jsonResponse = File.ReadAllText(filePath);
我相信将为您剥离BOM。或者,您可以尝试自己明确修剪它:
jsonResponse = jsonResponse.TrimStart('\feff');
答案 1 :(得分:4)
我的猜测是你的文件中有一个终止换行符。
您只需将其与a == b
进行比较,即可轻松验证两个字符串在C#中是否具有相同的内容。
这是一个简短的代码示例,可以帮助您确定问题。字符串输出由< >
包围,这可以帮助您识别周围的空格(顺便说一句,可以使用String.Trim删除)。
byte[] byteArray = System.IO.File.ReadAllBytes(filePath);
string fromFile = System.Text.Encoding.UTF8.GetString(byteArray);
string fromString = "{\"Name\":\"Pete\"}";
if (fromFile == fromString) {
Console.WriteLine("Strings are the same.");
} else {
Console.WriteLine("Strings are different!");
Console.WriteLine("fromFile: <" + fromFile + ">");
Console.WriteLine("fromString: <" + fromString + ">");
}