Я уже пробовал различные возможности, но, возможно, я просто слишком устал видеть решение -.-сериализации: Динамические имена классов
У меня есть структуру XML, как это:
<diagnosisList>
<diagnosis>
<surgery1>
<date>1957-08-13</date>
<description>a</description>
<ops301>0-000</ops301>
</surgery1>
<surgery2>
<date>1957-08-13</date>
<description>a</description>
<ops301>0-000</ops301>
</surgery2>
<surgery...>
</surgery...>
</diagnosis>
</diagnosisList>
Как вы видите, существует переменное количество операций. У меня есть «операция» класса, содержащая элементы XML.
class Surgery
{
[XmlElement("date")]
public string date { get; set; }
[XmlElement("description")]
public string description { get; set; }
[XmlElement("ops301")]
public string ops301 { get; set; }
public Surgery()
{
}
}
и классический диагноз, создающий структуру, путем добавления класса хирургии к конструктору.
diagnosis.cs
class Diagnosis
{
[XmlElement("surgery")]
public Surgery surgery
{
get;
set;
}
public Diagnosis(Surgery Surgery)
{
surgery = Surgery;
}
}
Мне нужно, чтобы иметь возможность сериализации имя класса операции динамически путем добавления номера перед сериализации происходит.
Неужели кто-то знает способ достичь этого?
любая помощь очень ценится :)
Сердечные приветы Сандро
- EDIT
создать всю структуру, начиная с моего корневого класса "Импорт". этот класс затем будет передан в сериализатор. Поэтому я не могу использовать XMLWriter в середине создания структуры. Мне нужно создать всю структуру первого и, наконец, он будет сериализовать:
private static void XmlFileSerialization(Import import)
{
string filename = @"c:\dump\trauma.xml";
// default file serialization
XmlSerializer<Import>.SerializeToFile(import, filename);
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("", "");
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
settings.IndentChars = "\t";
XmlSerializer<Import>.SerializeToFile(import, filename, namespaces, settings);
}
, а затем в «SerializeToFile» Метод
public static void SerializeToFile(T source, string filename, XmlSerializerNamespaces namespaces, XmlWriterSettings settings)
{
if (source == null)
throw new ArgumentNullException("source", "Object to serialize cannot be null");
XmlSerializer serializer = new XmlSerializer(source.GetType());
using (XmlWriter xmlWriter = XmlWriter.Create(filename, settings))
{
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(T));
x.Serialize(xmlWriter, source, namespaces);
}
}
}
Что мне нужно, чтобы иметь возможность создать экземпляр переменное число классы, основанные на основном классе «Хирургия». Класс должен иметь имя переменной, т.е.
surgery1, surgery2, surgery3 и т.д.
Это не может быть изменен, так как это определяется учреждением, определяющим структуру XML.
класс должен быть доступен по его динамическому имени, так как должно быть задано свойство в классе.
так:
surgery1.Property = "блабла";
хирургия2. Свойство = "babla";
т.д.
Я даже думать об использовании методов T4, чтобы создать эту часть кода, но должен быть другой способ достижения динамических имен классов.
Я также думал о создании экземпляров с именами переменных класса с помощью отражения:
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(string className)
Но это не работает на самом деле -.-
Есть ли у кого-нибудь намек и может поставить меня в правильном направлении?
Наверняка ваш 'Diagnosis' класс должен иметь список' Surgery' как XML делает? – Jamiec
Чтобы достичь своей цели, я рекомендую либо реализовать свой собственный deserializationlogic, либо очистить ваш xml раньше. '' не должны иметь эти числа. Вместо этого число должно быть anttribute '' –
lokusking
Вы можете реализовать 'IXmlSerializable' в соответствии с строками [как получить имя элемента xml из значения атрибута класса с помощью аннотаций?] (Https: // stackoverflow. ком/вопросы/28769495). Или вы можете использовать '[XmlAnyElement]' в строках [Как десериализовать xml-элементы с разными именами, но тот же набор атрибутов для типизированного массива/коллекции] (http://stackoverflow.com/questions/30910834) , – dbc