我以前asked a question here on SO曾对此问题进行过调查,但现在我发现我并未对此问题进行过多调查,因此我错误地得出结论,错误是我所使用的(Newtonsoft)JSON库中的错误,如上一个问题。
在使用Microsoft的Web.Script.Serialization进行测试之后,仍然存在完全相同的问题,因此,我认为将其作为一个单独的SO问题来询问是合适的;这样问题才能吸引具有适当标题的适当受众。
除了上述说明之外,问题仍然相同,下面有更多详细信息:
在我的C#应用程序中。我有以下c#类要序列化:
class resultCommentsJsonMask
{
public List<resultCommentAuthorityEntry> authorities { get; set; }
public resultCommentTypes globalComments { get; set; }
public List<string> commentTypes { get; set; }
}
public class resultCommentAuthorityEntry
{
public string name { get; set; }
public string description { get; set; }
public string commentType { get; set; }
public bool useGlobalSelectableComments { get; set; }
public bool useGlobalAutomatedComments { get; set; }
public resultCommentTypes comments { get; set; }
}
public class resultCommentTypes
{
public string selectable { get; set; }
public List<resultCommentBoundary> automated { get; set; }
}
public class resultCommentBoundary
{
public decimal lowerRange { get; set; }
public decimal upperRange { get; set; }
public string comment { get; set; }
}
创建resultCommentsJsonMask
的实例并填充数据后,我做了JsonConvert.SerializeObject(instance_of_resultCommentsJsonMask)
但是,在另外两台计算机(我的应用程序用户)上,所有JSON密钥都被替换为奇怪的字符。
这些计算机和我的计算机之间唯一明显的区别是,我使用的是32位Windows 7 PC,而我的计算机是64位Windows10。现在,更加令人困惑的是,我得到了另一台Windows 10 PC,该计算机的工作原理完全正确就像我自己的Win 7电脑。
我将应用程序转换为控制台应用程序,并在PC上将序列化的JSON输出记录到控制台,然后得到了以下正确的JSON输出:
但是,这些其他(Windows 10)PC上的控制台输出中的问号形式的文本乱码了,这些字符意味着JSON键(例如,我上面的控制台输出中的“ Authorities”,“ Name”等),如下所示:
还要注意,即使我使用Microsoft的Javascriptserializer JSON库而不是Newtonsoft,该问题仍然存在,这使我不得不断定这是“与库无关”的问题。
修改
上面用于生成控制台输出的相关代码:
var json = serializer.Serialize(commentsStore);
Console.WriteLine(string.Format("Setting store: {0}", json));