ServiceStack JsonSerializer.DeserializeFromString не будет работать со строками UTF-8

Мне нужно поддерживать UTF-8 в моем приложении MonoTouch для iPhone, и я только что обновил все свои серверные PHP-скрипты для кодирования в UTF-8 вместо ANSI.

Это изменение нарушило мой клиентский код, и в ServiceStack выдается исключение при попытке сериализации возвращаемой строки из сценариев PHP.

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 ответа

Решение

Рассматривали ли вы знак порядка байтов (BOM), это символ Unicode, который не отображается в текстовых редакторах. может, тебе стоит от этого избавиться.

Пожалуйста, используйте библиотеку 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);
}
Другие вопросы по тегам