代码如下:        public static string ToXml(object o)
        {
            var returnval = string.Empty;
            XmlSerializer xs = new XmlSerializer(typeof(PGFF));
            using (MemoryStream ms = new MemoryStream())
            {
                xs.Serialize(ms, o);
                returnval = System.Text.Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
            }
            return returnval;
        }
返回的xml<?xml version="1.0"?>
<PGFF version="0.0.1">
  <Guid>00000000-0000-0000-0000-000000000000</Guid>
  <Screens>
......
这里第一行 <?xml 里没有 Encoding属性,如何在序列化时加入?

解决方案 »

  1.   

    用 XmlWriter + XmlWriterSetting
    var result = string.Empty;
    XmlSerializer xs = new XmlSerializer(obj.GetType());
    XmlWriterSettings xws = new XmlWriterSettings();
    Encoding utf8 = Encoding.UTF8;
    xws.Encoding = utf8;
    using (MemoryStream ms = new MemoryStream())
    {
        using (XmlWriter xw = XmlWriter.Create(ms, xws))
        {
            xs.Serialize(xw, obj);
            result = utf8.GetString(ms.ToArray());
        }
    }
    return result;
      

  2.   

    上面的代码生成的XML在ie中无法浏览,重写了一下:
         public new string ToXml()
            {
                var result = string.Empty;
                XmlSerializer xs = new XmlSerializer(typeof(PGFF));
                using (MemoryStream ms = new MemoryStream())
                {
                    using (TextWriter tw = new StreamWriter(ms, new UTF8Encoding()))
                    {
                        xs.Serialize(tw, this);
                        result = Encoding.UTF8.GetString(ms.ToArray());
                    }
                }
                return result;
            }