C# XML序列化国家字符错误

C# XML序列化国家字符错误,c#,asp.net,xml-serialization,C#,Asp.net,Xml Serialization,编辑: 做得太多了。。。。这对我来说很管用 var xs = new XmlSerializer(typeof(ToDoItem)); var stringWriter = new StringWriter(); xs.Serialize(stringWriter, item); var test = XDocument.Parse(stringWriter.ToStr

编辑:

做得太多了。。。。这对我来说很管用

                var xs = new XmlSerializer(typeof(ToDoItem));
                var stringWriter = new StringWriter();
                xs.Serialize(stringWriter, item);
                var test = XDocument.Parse(stringWriter.ToString());
…其中项是包含具有国家字符的字符串的对象

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

我做了一个项目,对一些对象进行了序列化

我从这个网站上的示例中复制了一些代码,一切都很好,直到我将framework 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

现在它保存了以下内容: ���A.��

我想:关于我可能必须在IIS7中进行的设置的信息

如何改变序列化方法以更好地处理国家字符

这是使用的序列化代码

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

您使用ASCII将文本保存为,然后使用UTF-8对其进行解码,并期望它能正常工作?不会的。不管有什么更新或设置,此代码都无法正常工作

无需将XML写入
内存流
,然后对其进行解码。只需使用:


嗯,我的错。结果保存在内存中,从未保存到文件中,因此这不是问题所在。然而,我发现我做的太多了,而你的例子让我能够消除这一点。序列化对象当然比字符串示例更复杂,但没有任何问题结果从未保存到文件并不重要。当您(间接)将字符串转换为
字节[]
时,将使用编码。