Сериализация XML с помощью .NET - PullRequest
0 голосов
/ 08 августа 2010

Я пытаюсь сериализовать объект в XML, используя C # со следующим кодом:

            memoryStream = new System.IO.MemoryStream();
            Serializer.Serialize(memoryStream, this);
            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            streamReader = new System.IO.StreamReader(memoryStream);
            return streamReader.ReadToEnd();

Моя проблема заключается в том, что это приводит к следующему выводу в части документа:

<?xml version="1.0"?>

И я хочу иметь следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

Кто-нибудь знает, как включить атрибуты «кодирование» и «автономный»?

Я видел это , но, похоже, не производит вывод, который мне нужен.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 08 августа 2010

Попробуйте выполнить

MyClass instance = new MyClass ();
// fill instance 

XmlSerializer serializer = new XmlSerializer (typeof (MyClass));
XmlWriterSettings settings = new XmlWriterSettings ();
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.UTF8;
// next two settings are optional
settings.Indent = true;
settings.IndentChars = "    ";

using (XmlWriter writer = XmlWriter.Create ("test.xml", settings)) {
    writer.WriteRaw ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
    serializer.Serialize (writer, instance);
}

ОБНОВЛЕНО : Кстати, если вы не хотите иметь

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"

в качестве атрибута корневых элементов в файле XML и вообще не имеющих пространств имен, которые вы создаете, вы можете использовать [XmlRoot(Namespace="")] в качестве атрибута вашего calss MyClass и заменить строку

serializer.Serialize (writer, instance);

со строками

XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces ();
namespaces.Add (string.Empty, string.Empty);
serializer.Serialize (writer, instance, namespaces);
0 голосов
/ 08 августа 2010

Это помечено как сериализуемый?Если да, есть ли у вас свойства, которые вы хотите опубликовать?Возможно, вам также следует опубликовать свой источник (this)

Вот хорошая отправная точка: LINK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...