xml序列化 - 删除命名空间

Pan*_*kaj 22 c# xml-serialization

我正在使用c#序列化一个对象.我得到的结果如下所示

  <?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>
Run Code Online (Sandbox Code Playgroud)

但我希望得到这种格式的结果.

<?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>
Run Code Online (Sandbox Code Playgroud)

我的代码

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; }


    }
Run Code Online (Sandbox Code Playgroud)

Vla*_*lov 60

你应该只需更换[XmlArray("Users")][XmlElement("User")]

此属性告诉序列化程序,您要将所有这些用户项目存储在特定节点"用户"下,如果您将其替换为XmlElement,则serialzer将根据您的需要将所有这些用户内联(位于第一个用户标记下)存储.

至于xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"名称空间.它们是自动添加的,但它们是无害的,因为所有元素都在默认命名空间中.您可以在XmlSerializer通话中添加以下代码,以便删除这些代码:

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


小智 5

你应该写:

XmlSerializer sr = new XmlSerializer(typeof(Users));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
sr.Serialize(ms, this, ns);
Run Code Online (Sandbox Code Playgroud)