xml序列化 – 删除命名空间

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

     <Users  

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

      

这是我的代码

 public class Users { [XmlArray("Users")] public List 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; } } 

你应该简单地用[XmlElement("User")]替换[XmlArray("Users")] [XmlElement("User")]

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

至于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); 

你应该写:

 XmlSerializer sr = new XmlSerializer(typeof(Users)); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("",""); sr.Serialize(ms, this, ns); 

Quickie解决方案 – 转换为字符串然后删除 – 使用按钮单击开始执行。

 Imports System.IO Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim mydoc As XElement = XElement.Load("C:\Users\Documents\myfile.XML") Dim y As String = mydoc.ToString Dim z As String = mydoc.Name.Namespace.ToString Dim getrid As String = " xmlns=" & Chr(34) & z & Chr(34) y = Replace(y, getrid, "") Dim tr As TextReader = New StringReader(y) Dim newdoc As XElement = XElement.Load(tr) tr.Close() Debug.Print(newdoc.ToString) End Sub End Class