Как десериализовать пространства имен XML в C # (System.Xml.Serialization)? - PullRequest
5 голосов
/ 09 октября 2009

Я просто добавляю последние штрихи к своему десериализатору Zthes в формате *1002* (System.Xml.Serialization), который использует пространство имен "dc" в элементе "thes". Все элементы «term» отлично десериализуются, потому что у них нет пространства имен, но я не могу понять, как сообщить десериализатору, что у элементов «thes» есть пространство имен.

Вот то, что я пытаюсь сделать (что не работает), так что, надеюсь, кто-нибудь сможет дать мне правильный синтаксис.

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

Ответы [ 2 ]

8 голосов
/ 09 октября 2009

Вот быстрый пример для вас ...

[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>
             */
        }
    }
}
1 голос
/ 09 октября 2009
[XmlElement("someElement", Namespace="namespace")]
public string SomeElement;

Добавление: убедитесь, что «пространство имен» является полным URI пространства имен, а не просто префиксом.

...