如何将类序列化为 xml 结构
本文关键字:xml 结构 序列化 | 更新日期: 2023-09-27 18:35:16
如何将我的以下类{0}序列化为下面的 xml {1}。
因此,类名、属性名应与 xml 匹配。
{0}:
[Serializable]
public class ProfileSite
{
[XmlAttribute("profileId")]
public int ProfileId { get; set; }
[XmlAttribute("siteId")]
public int SiteId { get; set; }
public Link[] Links { get; set; }
public XElement Deserialize()
{
}
}
{1}:
<profileSite profileId="" siteId="">
<links>
<link>
<originalUrl></originalUrl>
<isCrawled></isCrawled>
<isBroken></isBroken>
<isHtmlPage></isHtmlPage>
<firstAppearedLevel></firstAppearedLevel>
</link>
</links>
</profileSite>
非常感谢,
[XmlRoot("profileSite")]
public class ProfileSite
{
[XmlAttribute("profileId")]
public int ProfileId { get; set; }
[XmlAttribute("siteId")]
public int SiteId { get; set; }
[XmlArray("links"), XmlArrayItem("link")]
public Link[] Links { get; set; }
}
然后:
var ser = new XmlSerializer(typeof(ProfileSite));
var site = (ProfileSite) ser.Deserialize(source);
第一步是用相关的Xml...
属性标记你的类,这些属性控制sreialization以及是否具有属性或元素。您的要求基本上改变了大小写,并将主对象的属性作为属性,将所有子对象Link
对象的属性作为元素:
[XmlRoot("profileSite")]
public class ProfileSite
{
[XmlAttribute("profileId")]
public int ProfileId { get; set; }
[XmlAttribute("siteId")]
public int SiteId { get; set; }
[XmlArray("links"), XmlArrayItem("link")]
public Link[] Links { get; set; }
}
public class Link
{
[XmlElement("originalUrl")]
public string OriginalUrl{get;set;}
// You other props here much like the above
}
然后使用XmlSerializer.Serialize
进行序列化,有许多重载占用varios位置来输出结果。对于测试,您可以使用Console.Out
。
XmlSerializer serializer = new XmlSerializer(typeof(ProfileSite));
serializer.Serialize(Console.Out, obj);
你可能想要添加一个空的命名空间管理器,它停止了丑陋的额外xmlns
属性:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
XmlSerializer serializer = new XmlSerializer(typeof(ProfileSite));
serializer.Serialize(Console.Out, obj,ns);
使用此示例对象输出上述内容:
var obj = new ProfileSite{
ProfileId=1,
SiteId=2,
Links = new[]{
new Link{OriginalUrl="www.google.com" },
new Link{OriginalUrl="www.foo.com" }
}};
是这样的:
<?xml version="1.0" encoding="utf-8"?>
<profileSite profileId="1" siteId="2">
<links>
<link>
<originalUrl>www.google.com</originalUrl>
</link>
<link>
<originalUrl>www.foo.com</originalUrl>
</link>
</links>
</profileSite>
最后,这里有一个工作示例供您使用:http://rextester.com/XCJHD55693