2011-10-20 7 views
0

EDIT:XMLシリアル化の国家文字エラー

すぎ....これは国家の文字

   var xs = new XmlSerializer(typeof(ToDoItem)); 
       var stringWriter = new StringWriter(); 
       xs.Serialize(stringWriter, item); 
       var test = XDocument.Parse(stringWriter.ToString()); 

で私の作品をやって...項目が国家文字と文字列を含むオブジェクトです

/EDIT

私はいくつかのオブジェクトのシリアル化を使ってプロジェクトを行いました。

フレームワークASP.NETを3.5から4.0に変更するまで、このサイトのサンプルコードをコピーしました。(そして、ISS7 .net設定をv2.0からv4.0に変更しました)

私は、これは次のエラーの原因である99%確信している:

この変更する前にこのような何か:

   var test = XDocument.Parse(SerializeObject("æøåAØÅ", typeof(string))); 
       test.Save(HttpContext.Current.Server.MapPath("test.xml")); 

が使用される正確な文字でXMLを保存するでしょう。

今では、この保存されます:私はIIS7

OR

に変更する方法についてのコメントを確認する必要があります設定に関する情報を:私は希望

を各国の文字をよりよく扱うためのメソッドのシリアライズ。

これは、使用されるシリアライゼーションコードです。

private static String UTF8ByteArrayToString(Byte[] characters) 
    { 
     var encoding = new UTF8Encoding(); 

     String constructedString = encoding.GetString(characters); 

     return (constructedString); 
    } 



    public static String SerializeObject(Object pObject, Type type) 
    { 
     try 
     { 
      String XmlizedString = null; 
      var memoryStream = new MemoryStream(); 
      var xs = new XmlSerializer(type); 
      var xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.ASCII); 


      xs.Serialize(xmlTextWriter, pObject); 
      memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
      XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
      return XmlizedString.Trim(); 
     } 

     catch (Exception e) 
     { 
      //Console.WriteLine(e); 

      return null; 
     } 
    } 

答えて

1

ASCIIを使用してテキストを保存し、UTF-8を使用してテキストをデコードし、正常に動作することを期待しますか?それはできません。このコードは、更新や設定に関係なく、正常に動作することはありません。

XMLをMemoryStreamに書き込み、それをデコードする必要はありません。ただ使用するStringWriter

var xs = new XmlSerializer(type); 
var stringWriter = new StringWriter(); 
xs.Serialize(stringWriter, pObject); 
return stringWriter.ToString(); 
+0

よく - 私の悪い。結果はメモリに保存され、ファイルに保存されることはありませんでしたので、それは問題ではありませんでした。しかし、 - 私はあまりにも多くのことをしていることを知り、あなたの例は私にそれを切り捨てることを可能にしました。シリアライズされたオブジェクトは、もちろん文字列の例よりも複雑でしたが、問題はありません – Steen

+0

結果がファイルに保存されたことは決してありません。あなたが(間接的に)した文字列を 'byte []'に変換すると、エンコーディングが使用されます。 – svick