在C#中从XML序列化中删除父XML元素?
我有一个名为Node的类,其中有documentclass类型的属性 当我将其序列化为XML时,我得到的输出是在C#中从XML序列化中删除父XML元素?,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我有一个名为Node的类,其中有documentclass类型的属性 当我将其序列化为XML时,我得到的输出是 <Node> <DocumentType> <File></File> </DoumentType> <Node> 如何使用C#xml序列化实现这一点?您是否考虑过实现IXmlSerializableinterface- 然后,您应该能够编写自定义序列化/反序列化以促进上述操作。根据Kami的建议,以下是供您参考
<Node>
<DocumentType>
<File></File>
</DoumentType>
<Node>
如何使用C#xml序列化实现这一点?您是否考虑过实现
IXmlSerializable
interface-
然后,您应该能够编写自定义序列化/反序列化以促进上述操作。根据Kami的建议,以下是供您参考的代码。所有的功劳都归于卡米
public class Node : IXmlSerializable {
public Node() {
NodeDocument = new Document();
}
public Document NodeDocument { get; set; }
public System.Xml.Schema.XmlSchema GetSchema() {
return null;
}
public void ReadXml(XmlReader reader) {
reader.ReadStartElement();
NodeDocument.File = reader.ReadString();
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer) {
writer.WriteStartElement("file");
writer.WriteString(NodeDocument.File);
writer.WriteEndElement();
}
}
public class Document {
public String File { get; set; }
}
class Program {
static void Main(string[] args) {
var node = new Node();
node.NodeDocument.File = "bbb.txt";
Serialize<Node>("a.xml", node);
node = Deserialize<Node>("a.xml");
Console.WriteLine(node.NodeDocument.File);
Console.Read();
}
static T Deserialize<T>(String xmlFilePath) where T : class {
using (var textReader = File.OpenText(xmlFilePath)) {
using (var xmlTextReader = new XmlTextReader(textReader)) {
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(xmlTextReader);
}
}
}
static void Serialize<T>(String xmlFilePath, T obj) where T : class {
using (var textWriter = File.CreateText(xmlFilePath)) {
using (var xmlTextWriter = new XmlTextWriter(textWriter)) {
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(xmlTextWriter, obj);
}
}
}
}
公共类节点:IXmlSerializable{
公共节点(){
NodeDocument=新文档();
}
公共文档NodeDocument{get;set;}
public System.Xml.Schema.XmlSchema GetSchema(){
返回null;
}
public void ReadXml(XmlReader读取器){
reader.ReadStartElement();
NodeDocument.File=reader.ReadString();
reader.ReadEndElement();
}
public void WriteXml(XmlWriter){
writer.writeStart元素(“文件”);
writer.WriteString(NodeDocument.File);
writer.writeedelement();
}
}
公共类文档{
公共字符串文件{get;set;}
}
班级计划{
静态void Main(字符串[]参数){
var node=新节点();
node.NodeDocument.File=“bbb.txt”;
序列化(“a.xml”,节点);
node=反序列化(“a.xml”);
WriteLine(node.NodeDocument.File);
Console.Read();
}
静态T反序列化(字符串xmlFilePath),其中T:class{
使用(var textReader=File.OpenText(xmlFilePath)){
使用(var xmlTextReader=新的xmlTextReader(textReader)){
var serializer=newxmlserializer(typeof(T));
返回(T)序列化程序。反序列化(xmlTextReader);
}
}
}
静态void序列化(字符串xmlFilePath,T obj),其中T:class{
使用(var textWriter=File.CreateText(xmlFilePath)){
使用(var xmlTextWriter=新的xmlTextWriter(textWriter)){
var serializer=newxmlserializer(typeof(T));
serializer.Serialize(xmlTextWriter,obj);
}
}
}
}
DocumentType听起来像是在描述节点元素,所以为什么不使用[xmldattribute]
将其设置为属性呢<代码>您可以发布对象代码吗?是否有文件
的替代文档类型?DocumentType
是数组吗?但我还有其他属性需要导出为XML。它们不是字符串。它们可以是List、boolean或其他类。
public class Document
{
[XmlElement(ElementName = "file")]
public string File { get; set; }
}
public class Node
{
public Document NodeDocument
{
get;
set;
}
}
public class Node : IXmlSerializable {
public Node() {
NodeDocument = new Document();
}
public Document NodeDocument { get; set; }
public System.Xml.Schema.XmlSchema GetSchema() {
return null;
}
public void ReadXml(XmlReader reader) {
reader.ReadStartElement();
NodeDocument.File = reader.ReadString();
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer) {
writer.WriteStartElement("file");
writer.WriteString(NodeDocument.File);
writer.WriteEndElement();
}
}
public class Document {
public String File { get; set; }
}
class Program {
static void Main(string[] args) {
var node = new Node();
node.NodeDocument.File = "bbb.txt";
Serialize<Node>("a.xml", node);
node = Deserialize<Node>("a.xml");
Console.WriteLine(node.NodeDocument.File);
Console.Read();
}
static T Deserialize<T>(String xmlFilePath) where T : class {
using (var textReader = File.OpenText(xmlFilePath)) {
using (var xmlTextReader = new XmlTextReader(textReader)) {
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(xmlTextReader);
}
}
}
static void Serialize<T>(String xmlFilePath, T obj) where T : class {
using (var textWriter = File.CreateText(xmlFilePath)) {
using (var xmlTextWriter = new XmlTextWriter(textWriter)) {
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(xmlTextWriter, obj);
}
}
}
}