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