C# XmlSerializer忽略的类属性

C# XmlSerializer忽略的类属性,c#,xml,xmlserializer,C#,Xml,Xmlserializer,我有一个表示书籍的类,当我运行SerializeToXmlElement方法时,它包括类,但不包括类属性。如何确保公共属性包含在XML输出中 图书班 输入 输出 如果有人能告诉我如何从XML输出中的Edition节点中删除xmlns:xsi和xmlns:xsd属性,我将获得额外的积分 您需要将第二个参数的true传递给: 深沉的  类型:System.Boolean  如果为true,则执行深度克隆;否则,错误 这表示也应复制传入节点的子节点。因此,您的代码应该如下所示: XmlNode edi

我有一个表示书籍的类,当我运行SerializeToXmlElement方法时,它包括类,但不包括类属性。如何确保公共属性包含在XML输出中

图书班

输入

输出

如果有人能告诉我如何从XML输出中的Edition节点中删除xmlns:xsi和xmlns:xsd属性,我将获得额外的积分

您需要将第二个参数的true传递给:

深沉的  类型:System.Boolean  如果为true,则执行深度克隆;否则,错误

这表示也应复制传入节点的子节点。因此,您的代码应该如下所示:

XmlNode edition = doc.ImportNode(b.SerializeToXmlElement(), true);
如果有人能告诉我如何从XML输出中的Edition节点中删除xmlns:xsi和xmlns:xsd属性,我将获得额外的积分

如中所述,您需要将具有空名称/命名空间对的XmlSerializerNamespaces传递到:


工作。

谢谢,那是我的意外。在我的代码中它被声明为公共的。太好了,谢谢。是否还有一种方法可以省略序列化为XML时继承的属性?@ryansin-关于这一点已经存在问题,例如和。如果这些不能满足您的需要,我建议您再问一个问题。谢谢@dbc,我能够包含ShouldSerializeXXX方法来覆盖基类属性
XmlDocument doc = new XmlDocument();
doc.AppendChild(doc.CreateXmlDeclaration("1.0","utf-8",null));
XmlNode rootnode = doc.AppendChild(doc.CreateElement("Root_Node"));
XmlNode editionsNode = rootnode.AppendChild(doc.CreateElement("Editions"));

Book b = new Book();
b.Isbn = "978-0-553-10953-5";
b.Title = "A Brief History of Time";
XmlNode edition = doc.ImportNode(b.SerializeToXmlElement(), false);
editionsNode.AppendChild(edition);
edition.AppendChild(doc.CreateElement("Impressions"));
<Root_Node>
    <Editions>
        <Edition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <Impressions />
        </Edition>
    </Editions>
</Root_Node>
XmlNode edition = doc.ImportNode(b.SerializeToXmlElement(), true);
public XmlElement SerializeToXmlElement()
{
    XmlDocument doc = new XmlDocument();
    using (XmlWriter writer = doc.CreateNavigator().AppendChild())
    {
        var ns = new XmlSerializerNamespaces();
        ns.Add("", ""); // Disable the xmlns:xsi and xmlns:xsd lines.
        new XmlSerializer(this.GetType()).Serialize(writer, this, ns);
    }
    return doc.DocumentElement;
}