XML序列化国家字符错误

时间:2011-10-20 12:39:21

标签: c# asp.net xml-serialization

编辑:

做得太多......这对我来说对国民来说很有用

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

... where该项是包含带有国家字符的字符串的对象

/ EDIT

我做了一个带有某些对象序列化的项目。

我从这个网站上的示例中复制了一些代码,一切都运行良好,直到我从3.5直到4.0改变框架ASP.NET ...(并将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中进行的设置的信息

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 个答案:

答案 0 :(得分:1)

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

无需将XML写入MemoryStream然后对其进行解码。只需使用StringWriter

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