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