отключение атрибутов пространства имен в сериализации - PullRequest
1 голос
/ 05 марта 2010

Использую следующий код для десериализации объекта,

        using (MemoryStream memoryStream = new MemoryStream())
        {
            try
            {
                XmlWriterSettings writerSettings1 = new XmlWriterSettings();
                writerSettings1.CloseOutput = false;
                writerSettings1.Encoding = System.Text.Encoding.UTF8;
                writerSettings1.Indent = false;
                writerSettings1.OmitXmlDeclaration = true;
                XmlWriter writer1 = XmlWriter.Create(memoryStream, writerSettings1);

                XmlSerializer xs1 = new XmlSerializer(obj.GetType(), string.Empty);
                xs1.UnknownAttribute += new XmlAttributeEventHandler(xs1_UnknownAttribute);
                xs1.UnknownElement += new XmlElementEventHandler(xs1_UnknownElement);
                xs1.UnknownNode += new XmlNodeEventHandler(xs1_UnknownNode);
                xs1.UnreferencedObject += new UnreferencedObjectEventHandler(xs1_UnreferencedObject);
                xs1.Serialize(writer1, obj);
                writer1.Close();

            }
            catch (InvalidOperationException)
            {
                return null;
            }
            memoryStream.Position = 0;
            serializeObjectDoc.Load(memoryStream);

            return serializeObjectDoc.DocumentElement;

После этого, когда я проверяю возвращающийся узел, я получаю два дополнительных атрибута {Attribute, Name = "xmlns: xsi ", Value =" http://www.w3.org/2001/XMLSchema-instance"} object {System.Xml.XmlAttribute} {Атрибут, Name = "xmlns: xsd", Value = "http://www.w3.org/2001/XMLSchema"} object {System.Xml.XmlAttribute}

Iхочу знать, как отключить эти два атрибута

1 Ответ

3 голосов
/ 05 марта 2010

XmlSerializerNamespaces на помощь; простой (но полный) пример:

using System.Xml.Serialization;
using System;
public class Foo
{
    public string Bar { get; set; }
    static void Main()
    {
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");
        XmlSerializer ser = new XmlSerializer(typeof(Foo));
        ser.Serialize(Console.Out, new Foo { Bar = "abc" }, ns);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...