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

「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 に答える
0

リンクされた例と同じことができるはずです (ただし、のXmlAttributeAttribute代わりに を使用しますXmlElementAttribute)。プロパティ宣言は次のようになります。

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

の詳細と例はXmlAttributeAttributemsdn サイトにあります。

要素の属性を取得するにはfName、年齢を名のプロパティのプロパティにする必要があると思います。fName属性は要素または要素にあるはずpersonですか?

于 2012-08-23T12:25:34.553 に答える