我需要在我的MonoTouch iPhone应用程序中支持UTF-8,并且刚刚更新了我的所有服务器PHP脚本,以UTF-8而不是ANSI编码。
此更改破坏了我的客户端代码,并且在尝试从PHP脚本中序列化返回的字符串时,ServiceStack中会抛出异常。
using (StreamReader reader = new StreamReader (webResponse.GetResponseStream (), Encoding.UTF8))
{
string responseString = reader.ReadToEnd();
myDto = JsonSerializer.DeserializeFromString (responseString, dtoType);
}
Exception: System.Runtime.Serialization.SerializationException: Type definitions should start with a '{', expecting serialized type 'UserGamesDTO', got string starting with: {"uc":"0","gma":[{"gid":"838","ui
异常是抱怨字符串显然不是以'{'开头,这是否意味着ServiceStack无法使用UTF-8字符串,或者我需要设置一些内容吗?
感谢。
答案 0 :(得分:2)
您是否考虑了字节顺序标记(BOM)字符,这是一个未在文本编辑器中显示的Unicode字符。 也许你应该摆脱它。
答案 1 :(得分:0)
请使用json.net库
var cfg = new ConfigFile();
cfg.xxx = xxx;
....
var str = Newtonsoft.Json.JsonConvert.SerializeObject(cfg);
var str = File.ReadAllText (filename, System.Text.Encoding.UTF8);
if (! String.IsNullOrEmpty (str)) {
var cfg = Newtonsoft.Json.JsonConvert.DeserializeObject<ConfigFile> (str);
}