这是产生问题的反序列化:
public MyType ProblematicDeserialization(jsonString)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<MyType>(jsonString);
}
它可以工作,或者它没有关于如何加载jsonString:
案例1:
myObjectType
将json.net序列化为字符串,然后写入filePath
:
//This line works correctly:
dynamic correctlyWorkingJson = IO.File.ReadAllText(filePath, Text.Encoding.UTF8);
案例2
与 CASE 1 相同,但filePath
的内容已被复制,然后粘贴到我的项目中的json资源中:
//This line gives an ERROR: ""Unexpected character encountered while parsing value: . Path '', line 0, position 0."
dynamic notWorkingJson = GetJsonFromResource(resourceName);
private string GetJsonFromResource(string resourceName)
{
byte[] jsonBytes = Convert.ToByte(ResourcesManager.GetResource(resourceName));
if (jsonBytes == null) {
throw new Exception(string.Format("Resource '{0}.json' was not found.", resourceName));
}
string json = UTF8BytesToString(jsonBytes);
return json;
}
在调试器上,correctlyWorkingJson
和notWorkingJson
看起来完全相同,但显然有些东西会使资源json不能被json.net反序列化接受。
答案 0 :(得分:1)
在/ u / dbc的注释中,字节序列表明资源文件的编码是UTF-8-BOM,我这样解决了:
之后,原帖中发布的完全相同的代码完美无缺。
答案 1 :(得分:0)
首先你的样本没有编译,我认为你的意思是
public MyType ProblematicDeserialization(s)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<MyType)(s);
}