json.net反序列化从项目资源

时间:2015-10-01 07:29:32

标签: c# json.net

这是产生问题的反序列化:

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;
}

在调试器上,correctlyWorkingJsonnotWorkingJson看起来完全相同,但显然有些东西会使资源json不能被json.net反序列化接受。

2 个答案:

答案 0 :(得分:1)

在/ u / dbc的注释中,字节序列表明资源文件的编码是UTF-8-BOM,我这样解决了:

  • 我转到磁盘中的源文件,该文件被视为项目中的资源
  • 我用Notepad ++
  • 编辑了它
  • 编码 - &gt;转换为UTF-8

之后,原帖中发布的完全相同的代码完美无缺。

答案 1 :(得分:0)

首先你的样本没有编译,我认为你的意思是

public MyType ProblematicDeserialization(s)
{
    return Newtonsoft.Json.JsonConvert.DeserializeObject<MyType)(s);   
}