2

シリアル化の動作が、モノタッチのシミュレーターとiPadデバイスの違いであるのはなぜですか?シリアル化の動作がUTF-8であると宣言しましたが、シリアル化データをipadデバイスからWCFサービスに送信すると、メッセージをトレースすると、ASCIIに変わります。なぜですか。(そしてシミュレーターではUTF-8でOKです)

シミュレーター/中国語でのトレース:<?xml version = "1.0" encoding = "utf-8"?>..。

iPadデバイス/中国語でのトレース:<?xml version = "1.0" encoding = "us-ascii"?>..。

ところで、静的メソッドXmlSerializeを使用してデータを手動でシリアル化します。

    public static string XmlSerialize<T>(T obj)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            serializer.Serialize(ms, obj);
            ms.Seek(0, SeekOrigin.Begin);
            using (StreamReader reader = new StreamReader(ms, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }


    public static T XmlDeserialize<T>(string xmlOfObject) where T : class
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (StreamWriter sr = new StreamWriter(ms, Encoding.UTF8))
            {
                sr.Write(xmlOfObject);
                sr.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                return serializer.Deserialize(ms) as T;
            }
        }
    }
4

1 に答える 1

2

XmlSerializerutf-8も使用するように設定する必要があります。

var serializer = new XmlSerializer(typeof(MyClass));

using (var writer = new StreamWriter("file.path"))
{
  using (var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings { Indent = false, Encoding = Encoding.UTF8 }))
  {
    serializer.Serialize(xmlWriter, myObject);
  }
}

それ以外の場合は、デフォルトのエンコーディングが使用されます。

于 2012-10-16T12:02:43.560 に答える