3

MonoTouch iPhone アプリで UTF-8 をサポートする必要があり、ANSI ではなく UTF-8 でエンコードされるようにすべてのサーバー PHP スクリプトを更新しました。

この変更によりクライアント コードが破損し、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 文字列を処理できないことを意味しますか、それとも何か設定する必要がありますか?

ありがとう。

4

2 に答える 2

2

バイト オーダー マーク (BOM) 文字を考慮しましたか。これは、テキスト エディターには表示されない Unicode 文字です。たぶんあなたはそれを取り除くべきです。

于 2013-08-11T12:09:10.907 に答える
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);
}
于 2013-08-11T15:28:04.837 に答える