c# - 我可以让 XmlSerializer 在反序列化时忽略命名空间吗?

标签 c# .net serialization xml-serialization

我能否让 XmlSerializer 在反序列化时忽略 namespace (xmlns 属性),这样无论是否添加该属性,或者即使该属性是伪造的都无关紧要?我知道来源永远是可信的,所以我不关心 xmlns 属性。

最佳答案

是的,您可以告诉 XmlSerializer 在反序列化期间忽略 namespace 。

定义一个忽略命名空间的 XmlTextReader。像这样:

// helper class to ignore namespaces when de-serializing
public class NamespaceIgnorantXmlTextReader : XmlTextReader
{
    public NamespaceIgnorantXmlTextReader(System.IO.TextReader reader): base(reader) { }

    public override string NamespaceURI
    {
        get { return ""; }
    }
}

// helper class to omit XML decl at start of document when serializing
public class XTWFND  : XmlTextWriter {
    public XTWFND (System.IO.TextWriter w) : base(w) { Formatting= System.Xml.Formatting.Indented;}
    public override void WriteStartDocument () { }
}

这是一个如何使用该 TextReader 进行反序列化的示例:

public class MyType1 
{
    public string Label
    {
        set {  _Label= value; } 
        get { return _Label; } 
    }

    private int _Epoch;
    public int Epoch
    {
        set {  _Epoch= value; } 
        get { return _Epoch; } 
    }        
}



    String RawXml_WithNamespaces = @"
      <MyType1 xmlns='urn:booboo-dee-doo'>
        <Label>This document has namespaces on its elements</Label>
        <Epoch xmlns='urn:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>0</Epoch>
      </MyType1>";


    System.IO.StringReader sr;
    sr= new System.IO.StringReader(RawXml_WithNamespaces);
    var s1 = new XmlSerializer(typeof(MyType1));
    var o1= (MyType1) s1.Deserialize(new NamespaceIgnorantXmlTextReader(sr));
    System.Console.WriteLine("\n\nDe-serialized, then serialized again:\n");
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("urn", "booboo-dee-doo");
    s1.Serialize(new XTWFND(System.Console.Out), o1, ns);
    Console.WriteLine("\n\n");

结果是这样的:

    <MyType1>
      <Label>This document has namespaces on its elements</Label>
      <Epoch>0</Epoch>
    </MyType1>

关于c# - 我可以让 XmlSerializer 在反序列化时忽略命名空间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507331/

相关文章:

c# - 简单注入(inject)器 - 将 url 值注入(inject)到服务构造函数中

.net - 向mysql数据库插入浮点值不一致

serialization - 获取 Swift 类的属性列表

c# - 为什么我在此代码上得到 CS1056 意外字符 ''

c# - 从 DataTable 获取单个值的最佳方法?

c# - 如何让多个表单在 Winforms 应用程序中共享一个公共(public)菜单?

java - 序列化父子对象

python - 如何使类 JSON 可序列化以在 Django session 中使用

c# - 如何使用 SQL Server 创建自定义 ASP.NET 身份提供程序?

c# - 如何将异步工作作为 Web 服务的一部分进行?