XML Serialization C#

Solomka
Дата: 17.07.2014 15:23:38
Здравствуйте, подкажите пожалуйста как переопределить название элементов класса и заглавного элемента при XML сериалийзации?

Имею класс:
[XmlRoot("NODE")]
public class Node
{

[XmlElement( "NAME")]
public string Name;
[XmlElement("ID")]
public int ID;
[XmlElement("PARENTID")]
public int ParentID;
[XmlElement("DATA")]
public string Data;
[XmlElement("TYPE")]
public string Type;

public Node()
{
Name = "Unknown";
ID = 0;
Type = "NODE";
}

public Node(string Name0, int ID0, int ParentID0, string Data0, string Type0)
{
Name = Name0;
ID = ID0;
ParentID = ParentID0;
Data = Data0;
Type = Type0;
}
}


Написала метод для сериалийзации:

// Create file to save the data to
FileStream fs = new FileStream(fname_DeleteNode, FileMode.Create);

// Create an XmlSerializer object to perform the serialization

XmlSerializer xs = new XmlSerializer(typeof (List<Node>));

List<Node> DOC = new List<Node>();
for (int i = 0; i < XMLorder.Count; i++)
{
var ID = XMLorder[i];
Node nt = (Node) nodes[ID];

DOC.Add(nt);
}

// Use the XmlSerializer object to serialize the data to the file
xs.Serialize(fs, DOC);


Получаю такой XML файл:
<?xml version="1.0"?>
<ArrayOfNode xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Node>
<NAME>название1</NAME>
<ID>1000</ID>
<PARENTID>0</PARENTID>
<DATA>node.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<Node>
<NAME>название2</NAME>
<ID>1001</ID>
<PARENTID>1000</PARENTID>
<DATA>note.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<Node>
<NAME>название3</NAME>
<ID>1081</ID>
<PARENTID>1001</PARENTID>
<DATA>note.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<Node>
<NAME>название4</NAME>
<ID>1003</ID>
<PARENTID>1081</PARENTID>
<DATA>Введение.htm</DATA>
<TYPE>TEXT</TYPE>
</Node>
</ArrayOfNode>



А хочу получить:
Получаю такой XML файл:
<?xml version="1.0"?>
<DOC xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NODE>
<NAME>название1</NAME>
<ID>1000</ID>
<PARENTID>0</PARENTID>
<DATA>node.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<NODE>
<NAME>название2</NAME>
<ID>1001</ID>
<PARENTID>1000</PARENTID>
<DATA>note.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<NODE>
<NAME>название3</NAME>
<ID>1081</ID>
<PARENTID>1001</PARENTID>
<DATA>note.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<NODE>
<NAME>название4</NAME>
<ID>1003</ID>
<PARENTID>1081</PARENTID>
<DATA>Введение.htm</DATA>
<TYPE>TEXT</TYPE>
</NODE>
</DOC>



то есть вместо ArrayOfNode было DOC,
а вместо Node стало NODE...

Подскажите пожалуста как это можно сделать?
Shocker.Pro
Дата: 17.07.2014 15:38:20
FAQ по оформлению кода в сообщениях
buser
Дата: 17.07.2014 16:12:41
Solomka
Дата: 17.07.2014 16:25:27
Shocker.Pro
FAQ по оформлению кода в сообщениях


Кнопка SRC почему то не реагирует на клик
Shocker.Pro
Дата: 17.07.2014 16:33:49
надо включить JavaScript в браузере, видимо
можно вписать и руками
[SRС C#][/SR C]
[SRC XML][/SRC]
Solomka
Дата: 17.07.2014 16:35:01
buser
разве не это? http://msdn.microsoft.com/ru-ru/library/f1wczcys(v=vs.110).aspx


Спасибо большое -уже помогло...
остался один вопрос с "Node"...
я переделала метод сериализации:
// Create file to save the data to
FileStream fs = new FileStream(fname_DeleteNode, FileMode.Create);

// Create an XmlSerializer object to perform the serialization
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "DOC";
//xRoot.Namespace = "http://www.cpandl.com";
xRoot.IsNullable = true;

// Construct the XmlSerializer with the XmlRootAttribute.
XmlSerializer xs = new XmlSerializer(typeof (List<Node>),xRoot);

List<Node> DOC = new List<Node>();
for (int i = 0; i < XMLorder.Count; i++)
{
var ID = XMLorder[i];
Node nt = (Node) nodes[ID];

DOC.Add(nt);
}

// Use the XmlSerializer object to serialize the data to the file
xs.Serialize(fs, DOC);

получаю такой XML файл на выходе:
<?xml version="1.0"?>
<DOC xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Node>
<NAME>название1</NAME>
<ID>1000</ID>
<PARENTID>0</PARENTID>
<DATA>node.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<Node>
<NAME>название2</NAME>
<ID>1001</ID>
<PARENTID>1000</PARENTID>
<DATA>note.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<Node>
<NAME>название3</NAME>
<ID>1081</ID>
<PARENTID>1001</PARENTID>
<DATA>note.htm</DATA>
<TYPE>NODE</TYPE>
</Node>
<Node>
<NAME>название4</NAME>
<ID>1003</ID>
<PARENTID>1081</PARENTID>
<DATA>Введение.htm</DATA>
<TYPE>TEXT</TYPE>
</Node>
</DOC>


Как добиться такого переименования для элемента Node в NODE?
buser
Дата: 17.07.2014 16:41:31
Не понятно накуя... но http://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx
Читайте msdn
Solomka
Дата: 18.07.2014 08:26:21
buser
Не понятно накуя... но http://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx
Читайте msdn


Потому что программа изначально писалась не мной, а сейчас надо функционал программы доработать.
Обработчик риестрочувсвительный.
Вот поэтому где-то в чужой программе происходит ошибка.

Но все равно спасибо. :-*
Сначало я конечно в интеренете искала, нужно мне решения проблемы не нашла.
Помог атрибут [XmlType("NewTypeName")], а то в тех примерах, которые я раньше нашла, он не применялся
Arm79
Дата: 18.07.2014 14:09:58
а фотки на сайте где?
maximjon
Дата: 25.07.2014 16:33:20
Solomka
а вместо Node стало NODE...


Ну как бы и сами так указали.

Solomka
[XmlRoot("NODE")]
public class Node
{