簡體   English   中英

序列化類會自動向XML元素添加前綴

[英]Serializing class add prefixes automatically to XML elements

我有以下課程需要序列化:

[XmlRoot("Login", Namespace = "http://tempuri.org/Logon"), Serializable()]
    public class Login
    {
        [XmlElement("programCode")]
        public string ProgramCode { get; set; }
        [XmlElement("contactType")]
        public string ContactType { get; set; }
        [XmlElement("email")]
        public string Email { get; set; }
        [XmlElement("password")]
        public string Password { get; set; }
        [XmlElement("projectName")]
        public string ProjectName { get; set; }
}

序列化此類時,將獲得以下XML:

<q1:Login xmlns:q1="http://tempuri.org/Logon"><q1:programCode>abc</q1:programCode><q1:contactType>P</q1:contactType><q1:email>ws@abc.com</q1:email><q1:password>abc</q1:password><q1:projectName>abc</q1:projectName></q1:Login>

我不知道前綴q1是從哪里生成的。 我想要這樣的XML:

<Login xmlns="http://tempuri.org/Logon">
      <programCode>abc</programCode>
      <contactType>P</contactType>
      <email>ws@abc.com</email>
      <password>abc</password>
      <projectName>abc</projectName>
    </Login>

誰能幫我這個忙嗎? 謝謝。

更新:序列化代碼:

public string GetObjectInXML(object obj)
        {
            StringWriter sw = new StringWriter();
            StringBuilder sb = new StringBuilder(_soapEnvelope);
            XmlSerializer serializer = new XmlSerializer(obj.GetType());
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            XmlWriterSettings settings = new XmlWriterSettings
            {
                OmitXmlDeclaration = true
            };
            XmlWriter writer = XmlWriter.Create(sw, settings);

            ns.Add(string.Empty, string.Empty);
            serializer.Serialize(writer, obj, ns);
            var str = sw.ToString();

            return str;
        }

現在,這是一個返回字符串的方法,用於檢查我的XML是否正確構建。

XMLSerializer支持提供默認名稱空間,例如

string defaultNamespace = "http://tempuri.org/Logon";

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add(string.Empty, defaultNamespace);

XmlSerializer xs = new XmlSerializer(typeof(T), defaultNamespace);

您可以刪除名稱空間嗎?

    [XmlRoot("Login", Namespace = ""), Serializable()]
    public class Login { 
        [XmlElement("programCode")]
        public string ProgramCode { get; set; }
        [XmlElement("contactType")]
        public string ContactType { get; set; }
        [XmlElement("email")]
        public string Email { get; set; }
        [XmlElement("password")]
        public string Password { get; set; }
        [XmlElement("projectName")]
        public string ProjectName { get; set; }
    }
    public static string SerializeXml<T>(T value)
    {
        var settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;

        var namespaces = new XmlSerializerNamespaces();
        namespaces.Add("q1", "http://tempuri.org/Logon");

        var xmlserializer = new XmlSerializer(typeof(T));
        var stringWriter = new StringWriter();

        using (var writer = XmlWriter.Create(stringWriter, settings))
        {
            xmlserializer.Serialize(writer, value, namespaces);
            return stringWriter.ToString();
        }
    }
    public static void Main(string[] args)
    {
        var login = new Login();
        login.ContactType = "XMLType";
        login.Email = "x@x.com";

        var a = SerializeXml(login);
        Console.WriteLine(a);
        Console.ReadLine();
    }

結果

<Login xmlns:q1="http://tempuri.org/Logon">
    <contactType>XMLType</contactType>
    <email>x@x.com</email>
</Login>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM