如何将 xsi:noNamespaceSchemaLocation 添加到序列化器

Wol*_*ues 0 c# xml xsd

我构建了一个 XML 文档,需要根据 xsd 文件进行验证。因此,我需要在 xml 的根元素中引用 xsd 文件。到目前为止我使用这个 C# 代码:

var ser = new XmlSerializer(typeof(myspecialtype));
XmlSerializerNamespaces MainNamespace = new XmlSerializerNamespaces();
MainNamespace.Add("xlink", "http://www.w3.org/1999/xlink");
MainNamespace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
using (XmlWriter w = XmlWriter.Create(@"C:\myxmlfile.xml"))
{
    w.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"utils/somexsl.xsl\"");
    ser.Serialize(w, LeBigObject, HauptNs);
}
Run Code Online (Sandbox Code Playgroud)

生成的 Xml 开头如下:

var ser = new XmlSerializer(typeof(myspecialtype));
XmlSerializerNamespaces MainNamespace = new XmlSerializerNamespaces();
MainNamespace.Add("xlink", "http://www.w3.org/1999/xlink");
MainNamespace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
using (XmlWriter w = XmlWriter.Create(@"C:\myxmlfile.xml"))
{
    w.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"utils/somexsl.xsl\"");
    ser.Serialize(w, LeBigObject, HauptNs);
}
Run Code Online (Sandbox Code Playgroud)

但我需要这个:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="utils/somexsl.xsl"?>
<caddy-xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlVersion="03.07.00">
Run Code Online (Sandbox Code Playgroud)

我在这里遇到了“CreateAttribute”:Add Namespace to an x​​ml root node c#但我无法将它与序列化器放在一起。谢谢你!

Wol*_*ues 6

有人向我指出了这里的解决方案: https: //social.msdn.microsoft.com/Forums/en-US/e43585c6-181b-4449-8806-b07f82681a2a/how-to-include-xsinonamespaceschemalocation-in-the-xml?论坛=asmxandxml

我将其添加到我的班级中:

[XmlAttribute("noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)]
    public string attr = "utils/theveryimportant.xsd";
Run Code Online (Sandbox Code Playgroud)

它有效。