1

问题与此类似:

如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?

但专门用于属性。我有类似的东西:

<person xmlns:a="http://example.com" xmlns:b="http://sample.net"> <a:fName a:age="37">John</a:fName> <b:lName>Wayne</b:lName> </person>

而且我找不到将前缀添加到属性“年龄”的方法。

必须如何更改上面链接中提出的解决方案才能达到目标?我尝试了不同的解决方案但没有成功。

4

3 回答 3

1
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Serialization;

    namespace XMLSer
    {
        class Program
        {
            static void Main(string[] args)
            {
                FName fname = new FName { Age = 16.5, Text = "John" };

            Person person = new Person();

            person.fname = fname;
            person.lname = "Wayne";

            XmlSerializer ser = new XmlSerializer(typeof(Person));
            ser.Serialize(Console.Out, person);
            Console.ReadKey();
        }
    }

    [XmlRoot(ElementName = "person")]
    public class Person
    {
        [XmlElement(Namespace = "http://example.com")]
        public FName fname;

        [XmlElement(Namespace = "http://sample.com")]
        public string lname;

        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

        public Person()
        {
            xmlns.Add("a", "http://example.com");
            xmlns.Add("b", "http://sample.com");
        }
    }

    public class FName
    {
        [XmlAttribute("age")]
        public double Age;

        [XmlText]
        public string Text;
    }
}
于 2012-08-23T13:57:25.680 回答
0

您应该能够执行与链接示例中相同的操作(但使用 theXmlAttributeAttribute而不是XmlElementAttribute)。您的财产声明将类似于:

[XmlAttribute(Namespace = "http://example.com")]
public decimal Age { get; set; }

更多详细信息和示例XmlAttributeAttributemsdn 站点上

要获取fName元素的属性,我认为您需要将年龄作为名字属性的属性。属性应该在fName元素上还是在person元素上?

于 2012-08-23T12:25:34.553 回答
0

我在尝试将“xsi:schemaLocation”指定为属性时遇到了同样的问题。

我修复了它做下一个:

[XmlElement("xsi", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Xsi { get; set; }    

[XmlAttribute(AttributeName = "schemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string SchemaLocation { get; set; }

注意:两个命名空间必须匹配。

于 2014-05-23T11:18:03.073 回答