【问题标题】:How do I deserialize XML namespaces in C# (System.Xml.Serialization)?如何在 C# (System.Xml.Serialization) 中反序列化 XML 命名空间?
【发布时间】:2010-12-05 10:00:40
【问题描述】:

我只是对我的Zthes format 反序列化器(System.Xml.Serialization)进行最后的润色,它在元素“thes”中使用命名空间“dc”。所有“term”元素都可以很好地反序列化,因为它们没有命名空间,但我不知道如何告诉反序列化器“thes”元素有命名空间。

这是我正在尝试做的事情(这是行不通的),所以希望有人能给我正确的语法。

[XmlElement("namespace:someElement")]
public string SomeElement;

【问题讨论】:

    标签: c# xml serialization namespaces


    【解决方案1】:

    这里有一个简单的示例供您使用...

    [XmlRoot("myObject")]
    public class MyObject
    {
        [XmlElement("myProp", Namespace = "http://www.whited.us")]
        public string MyProp { get; set; }
    
        [XmlAttribute("myOther", Namespace = "http://www.whited.us")]
        public string MyOther { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            var xnames = new XmlSerializerNamespaces();
            xnames.Add("w", "http://www.whited.us");
            var xser = new XmlSerializer(typeof(MyObject));
            using (var ms = new MemoryStream())
            {
                var myObj = new MyObject()
                {
                    MyProp = "Hello",
                    MyOther = "World"
                };
                xser.Serialize(ms, myObj, xnames);
                var res = Encoding.ASCII.GetString(ms.ToArray());
                /*
                    <?xml version="1.0"?>
                    <myObject xmlns:w="http://www.whited.us" w:myOther="World">
                      <w:myProp>Hello</w:myProp>
                    </myObject>
                 */
            }
        }
    }
    

    【讨论】:

    • OP 的问题是关于反序列化,而不是序列化。反序列化方法不采用 XmlSerializerNamespaces 参数。
    • 我猜这就是他们在 6 年前接受我的回答的原因,
    【解决方案2】:
    [XmlElement("someElement", Namespace="namespace")]
    public string SomeElement;
    

    附录:确保“命名空间”是命名空间的完整 URI,而不仅仅是前缀。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 2015-11-03
      • 1970-01-01
      • 2021-02-17
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多