#c# #xml #serialization
#c# #xml #сериализация
Вопрос:
У меня есть класс, написанный следующим образом:
[XmlRoot]
public class MyXMLElement
{
[XmlAttribute]
public string AnAttribute { get; set; }
[XmlAttribute]
public string AnotherElementAttribute { get; set; }
}
Когда это сериализуется, я хочу установить его значение, поэтому я получаю что-то вроде следующего:
<MyXMLElement AnAttribute="something" AnotherElementAttribute="something else">The inner value of the element</MyXMLElement>
У кого-нибудь есть идеи?
Ответ №1:
Если вы хотите установить значение элемента, вы можете использовать [XmlText]
атрибут:
[XmlRoot]
public class MyXMLElement
{
[XmlAttribute]
public string AnAttribute { get; set; }
[XmlAttribute]
public string AnotherElementAttribute { get; set; }
[XmlText]
public string Value { get; set; }
}
Ответ №2:
Добавьте другое свойство для хранения внутреннего текста и пометьте его атрибутом XmlTextAttribute
[XmlRoot]
public class MyXMLElement
{
[XmlAttribute]
public string AnAttribute { get; set; }
[XmlAttribute]
public string AnotherElementAttribute { get; set; }
[XmlText]
public string InnerText { get; set; }
}
Комментарии:
1. Упс, думаю, я должен обновить перед публикацией. =T
Ответ №3:
Вы можете сделать это довольно легко, если напишете свой собственный сериализатор (пример ниже). Это также даст вам полный контроль над тем, как сохраняется ваш объект, а не полагаться на то, как .NET решит это сделать.
interface IXmlConvertable{
XElement ToXml();
}
public class MyClass : IXmlConvertable{
public string Name { get; set; }
public string ID { get; set; }
public XElement ToXml(){
var retval = new XElement("MyClass"
, new XAttribute("Name", new XCData(Name))
, new XAttribute("ID", new XCData(ID))
);
return retval;
}
}