【问题标题】:How to add namespace dynamically and xml serialization如何动态添加命名空间和xml序列化
【发布时间】:2011-05-05 17:07:31
【问题描述】:

我的班级代码为

public class OpenShipments
{
    private string _xmlns = "";
    private OpenShipment _OpenShipment = null;

    [XmlAttribute("xmlns")]
    public string xmlns
    {
        get { return _xmlns; }
        set { _xmlns = "x-schema:" + value; }
    }

    [XmlElement("OpenShipment")]
    public OpenShipment OpenShipment
    {
        get { return _OpenShipment; }
        set { _OpenShipment = value; }
    }

    public OpenShipments()
    {
        _OpenShipment = new OpenShipment();
    }
}

我包含一个名为 public string xmlns 的属性,它在序列化代码后将具有命名空间,但是当我们看到 xml 时没有添加命名空间。

在我的情况下,我需要将命名空间动态添加到 OpenShipments 元素,其值将被动态设置。在我的例子中,命名空间看起来像xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr",有时看起来像xmlns="x-schema:d:\UPSLabel\OpenShipments.xdr"

因此命名空间值x-schema:d:\UPSLabel\OpenShipments.xdr 将根据条件而有所不同。我需要建议如何动态添加命名空间来处理这种情况。

【问题讨论】:

  • 我可能完全错了,但命名空间通常是文件的保留关键字,例如namespace myProject { class myClass {} }。我还没有听说过 XML 的命名空间。
  • @ohmusama:XML 的命名空间已经存在很长时间了。 w3.org/TR/xml-names
  • 啊,c# 的整个命名空间和 XML 的命名空间令人困惑,我在阅读那个巨大的文本块时无法忘记 c# 命名空间,谢谢!

标签: c#


【解决方案1】:

你可以这样做:

序列化你的课程时

        System.Xml.Serialization.XmlSerializer xs = new XmlSerializer(<my class>.GetType());
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

        if(<condition>)
        {
        ns.Add(string.Empty, @"x-schema:C:\UPSLabel\OpenShipments.xdr");
        } 
        else
        {
        ns.Add(string.Empty, @"x-schema:D:\UPSLabel\OpenShipments.xdr");
        }

        xs.Serialize(<stream>, <your class instance>,ns);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2011-01-21
    • 2010-10-30
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多