XmlSerializer и управляющее пространство имен в XmlAnyElement - PullRequest
1 голос
/ 01 июня 2009

с использованием dotnet 2.0. Код для иллюстрации:

        Class1 c1 = new Class1(); 
        c1.SomeInt = 5;

        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<anode xmlns=\"xyz\" ><id>123</id></anode>");  

        c1.Any = new XmlElement[1];
        c1.Any[0] = (XmlElement)doc.DocumentElement;

        XmlSerializer ser = new XmlSerializer(typeof(Class1));
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "xyz");

        StringBuilder sb = new StringBuilder();
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;

        XmlWriter writer = XmlWriter.Create(sb, settings);
        writer.WriteStartElement("root");
        ser.Serialize(writer, c1, ns);
        writer.WriteEndElement();

        writer.Close();

        string str = sb.ToString();
        MessageBox.Show(str);

где Class1 определяется как:

[System.Serializable()]
[System.Xml.Serialization.XmlRoot(Namespace="xyz")]
public class Class1
{
    private int someInt;

    public int SomeInt
    {
        get { return someInt; }
        set { someInt = value; }
    }

    private System.Xml.XmlElement[] anyField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAnyElementAttribute()]
    public System.Xml.XmlElement[] Any
    {
        get
        {
            return this.anyField;
        }
        set
        {
            this.anyField = value;
        }
    }
}

Этот код отображает строку:

<root><Class1 xmlns="xyz"><SomeInt>5</SomeInt><anode xmlns="xyz"><id>123</id></anode></Class1></root>

Это правильный xml, но мне интересно, можно ли это упростить.

Я хотел бы, чтобы в элементе anode не было избыточной части xmlns = "xyz". я хотел бы:

<root><Class1 xmlns="xyz"><SomeInt>5</SomeInt><anode><id>123</id></anode></Class1></root>

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

Нет, я не верю, что ты можешь. Вы можете использовать псевдонимное пространство имен, как описано в этой статье: Предварительная проверка сериализации XML в веб-службах .

0 голосов
/ 18 октября 2010
settings.NamespaceHandling = NamespaceHandling.OmitDuplicates
...