且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

XML序列化 - 删除命名空间

更新时间:2023-11-02 16:08:16

您应该简单地替换 [XmlArray(用户)] [XmlElement的(用户)]



这属性告诉序列化,你要存储在特定节点用户所有这些用户的项目,如果你用的XmlElement 替换code>,serialzer将存储所有这些用户的内联(右下一批用户标签),就像你喜欢它。



至于的xmlns :XSI =htt​​p://www.w3.org/2001/XMLSchema-instance的xmlns:XSD =htt​​p://www.w3.org/2001/XMLSchema namesspaces。他们会自动添加,但它们是无害的,因为所有的元素都在默认名称空间。您可以添加以下代码到你的的XmlSerializer 调用,以删除这些:

  VAR XNS =新XmlSerializerNamespaces(); 
无功序列化=新的XmlSerializer(users.GetType());
xns.Add(的String.Empty,的String.Empty);
// ...
serializer.Serialize(流,用户,XNS);


I am serializing an object using c#. I am getting result in this format given bellow

  <?xml version="1.0"?>
    <Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Users>
        <User Id="11005477969327" CreateDate="06/03/2011" LastSendDate="1/1/0001" />
        <User Id="11034688201594" CreateDate="04/22/2012" LastSendDate="1/1/0001" />
       <Users 
    </User>

But I want result in this format.

<?xml version="1.0"?>
<Users>
  <User Id="11005477969327" SendDate="1/1/0001" NextSendDate="2/7/2012 11:13:30 AM" />
  <User Id="11034688201594" SendDate="1/1/0001" NextSendDate="2/7/2012 11:13:30 AM" />

</Users>

here my code

public class Users
    {
        [XmlArray("Users")]
        public List<User> ListData { get; set; }

        public string GetXML()
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream();

            XmlSerializer sr = new XmlSerializer(typeof(Users));
            sr.Serialize(ms, this);

            ms.Position = 0;
            return System.Text.Encoding.UTF8.GetString(ms.ToArray());
        }
    }

    public class User
    {
        [XmlAttribute("Id")]
        public Int64 UserId { get; set; }

        [XmlAttribute("CreateDate")]
        public string CreateDate { get; set; }

        [XmlAttribute("LastSendDate")]
        public string LastSendDate { get; set; }


    }

You should simply replace [XmlArray("Users")] with [XmlElement("User")]

This attribute tell serializer, that you want to store all those User items under particular node "Users", if you replace it with XmlElement, serialzer will store all those users inline (right under first Users tag) just as you like it.

As for xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namesspaces. They are added automatically, but they are harmless, since all your elements are in the default namespace. You may add following code to your XmlSerializer call in order to remove those:

var xns = new XmlSerializerNamespaces();
var serializer = new XmlSerializer(users.GetType());
xns.Add(string.Empty, string.Empty);
//...
serializer.Serialize(stream, users, xns);