在一个类前面加了[XmlRoot("test")]特性,序列化得到的xml的根节点是:<?xml version="1.0" encoding="utf-16"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">本想要的结果是:<?xml version=”1.0” encoding=”GBK”?>
<test>另:如何指定encoding为GBK

解决方案 »

  1.   

    XmlSerializer xmls = new XmlSerializer(typeof(MetadataDatabase));
                
                TextWriter tw = new StreamWriter(@"d:\list.xml");
                //xmls.Serialize(tw, mddb);
                XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
                xmlns.Add(string.Empty, string.Empty);
                xmls.Serialize(tw, mddb, xmlns);
                tw.Close();
      

  2.   

    我上次做了个序列化的,代码是这样的
    public static void WriteXML(object obj, string strPath)
            {
                TextWriter writer = null;
                try
                {
                    // 直接序列化生成xml
                    //XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
                    //xmlns.Add(string.Empty, string.Empty);
                    XmlSerializer serializer = new XmlSerializer(obj.GetType(),"");
                    writer = new StreamWriter(strPath);                serializer.Serialize(writer, obj);
                }
                catch (Exception err)
                {
                    if (writer != null)
                        writer.Close();
                    throw err;
                }
                finally
                {
                    writer.Close();
                }
            }但是导出的XML结构是这样的
    <?xml version="1.0" encoding="utf-8"?>
    <QueryListTables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <listTableObj>
        <TableObject>
          <tableName>sys_querylist</tableName>
          <dtField>
            <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
              <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true">
                <xs:complexType>
                  <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="Table">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="COLUMN_NAME" type="xs:string" minOccurs="0" />
                          <xs:element name="DATA_TYPE" type="xs:string" minOccurs="0" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:choice>
                </xs:complexType>
              </xs:element>
            </xs:schema>
            <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
              <NewDataSet>
                <Table diffgr:id="Table1" msdata:rowOrder="0">
                  <COLUMN_NAME>F_ID</COLUMN_NAME>
                  <DATA_TYPE>NUMBER</DATA_TYPE>
                </Table>
                <Table diffgr:id="Table2" msdata:rowOrder="1">
                  <COLUMN_NAME>F_REPORTID</COLUMN_NAME>
                  <DATA_TYPE>NUMBER</DATA_TYPE>
                </Table>
                <Table diffgr:id="Table3" msdata:rowOrder="2">
                  <COLUMN_NAME>F_QUERYID</COLUMN_NAME>
                  <DATA_TYPE>NUMBER</DATA_TYPE>
                </Table>
                <Table diffgr:id="Table4" msdata:rowOrder="3">
                  <COLUMN_NAME>F_TITLE</COLUMN_NAME>
                  <DATA_TYPE>NVARCHAR2</DATA_TYPE>
                </Table>
                <Table diffgr:id="Table5" msdata:rowOrder="4">
                  <COLUMN_NAME>F_SKINESTYPE</COLUMN_NAME>
                  <DATA_TYPE>NVARCHAR2</DATA_TYPE>
                </Table>还是有命名空间啊