jsonSerializer.c#中unicode字符的反序列化不能正常工作

本文关键字:常工作 工作 不能 反序列化 unicode 字符 jsonSerializer | 更新日期: 2023-09-27 18:18:45

我想将包含unicode数据的JSON对象反序列化为字符串数组。虽然JSON对象中的字符是英语,但它工作得很好。但是当我使用中文时,它不会。

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
string[] SampleText = jsonSerializer.Deserialize<string[]>(HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString());

当我在visual studio的即时窗口中运行这个时,结果是这样的

jsonSerializer.Deserialize<string[]>(HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString());
{string[3]}        
    [0]: "Size"
    [1]: "Name"
    [2]: "Type"

但是对于中文,出现了一个异常

base {System.SystemException}: {"Invalid JSON primitive: ."}
Message: "Invalid JSON primitive: ."
ParamName: null

英文和中文的资源文件值

["Size","Name","Type"]
[“大小”,“姓名”,“類型”]

jsonSerializer.c#中unicode字符的反序列化不能正常工作

EDIT:我刚刚注意到日语文本被智能引号“ ”包围,而不是实际引号"。将智能引号替换为简单引号。据我所知,没有一种语言使用智能引号作为文本分隔符,它们被视为内容。您的文本还使用非逗号字符(十六进制ff0c)而不是逗号。

. net中的

字符串是Unicode。不可能创建一个-Unicode字符串。

只有当您试图将非Unicode内容(如在特定代码页中编码的文件)当作Unicode文件来读取时才会出现问题。操作系统(和。net)将使用系统区域设置来读取非unicode文件,这可能导致数据乱码。解决方案是使用Unicode编码保存文件,或者如果文件编码与系统区域设置不同,则显式指定文件编码。

在您的例子中,资源文件很可能是而不是保存为Unicode(或UTF8)文件。以前版本的Visual Studio默认使用系统的语言环境保存文件(包括网页),这给非美国开发人员带来了一些非常有趣的问题。

检查HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString()返回的字符串。内容可能会乱码,这意味着原始字符串是而不是保存为Unicode。

解决方案可能就像将资源文件转换为Unicode一样简单。

是的,您需要首先将resx值转换为unicode,然后使用该值来反序列化JSON值,然后转换为字符串数组…

反序列化Json遇到URL更改

http://social.msdn.microsoft.com/forums/windowsapps/en us/d31864e0 - 015 d - 4 - dd3 - 9207 - 176281 - cf6f7b/deserialize json - winrt

http://www.codeproject.com/Articles/159450/fastJSON

使用DataContractJsonSerializer反序列化一个简单的JSON数组