ServiceStack JsonSerializer.DeserializeFromString不适用于UTF-8字符串

时间:2013-08-11 11:40:30

标签: php .net utf-8 xamarin.ios servicestack

我需要在我的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字符串,或者我需要设置一些内容吗?

感谢。

2 个答案:

答案 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);
}