Сериализовать класс С# в XML с атрибутами и одно значение для класса
Я использую С# и XmlSerializer для сериализации следующего класса:
public class Title
{
[XmlAttribute("id")]
public int Id { get; set; }
public string Value { get; set; }
}
Я хотел бы, чтобы это сериализовалось в следующем формате XML:
<Title id="123">Some Title Value</Title>
Другими словами, я хотел бы, чтобы свойство Value являлось значением элемента Title в XML файле. Кажется, я не могу найти способ сделать это без реализации собственного XML-сериализатора, чего я бы хотел избежать. Любая помощь будет оценена.
Ответы
Ответ 1
Попробуйте использовать [XmlText]
:
public class Title
{
[XmlAttribute("id")]
public int Id { get; set; }
[XmlText]
public string Value { get; set; }
}
Здесь я получаю (но я не тратил много времени на настройку XmlWriter, так что вы получаете кучу шума на пути пространств имен и т.д.:
<?xml version="1.0" encoding="utf-16"?>
<Title xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
id="123"
>Grand Poobah</Title>
Ответ 2
XmlTextAttribute возможно?
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var title = new Title() { Id = 3, Value = "something" };
var serializer = new XmlSerializer(typeof(Title));
var stream = new MemoryStream();
serializer.Serialize(stream, title);
stream.Flush();
Console.Write(new string(Encoding.UTF8.GetChars(stream.GetBuffer())));
Console.ReadLine();
}
}
public class Title
{
[XmlAttribute("id")]
public int Id { get; set; }
[XmlText]
public string Value { get; set; }
}
}