Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中从XML序列化中删除父XML元素?_C#_.net_Xml_Xml Serialization - Fatal编程技术网

在C#中从XML序列化中删除父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的类,其中有documentclass类型的属性

当我将其序列化为XML时,我得到的输出是

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