Сериализация класса C # в XML с атрибутами и одним значением для класса - PullRequest
26 голосов
/ 29 февраля 2012

Я использую C # и 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, которого я хотел бы избежать. Любая помощь будет оценена.

Ответы [ 2 ]

53 голосов
/ 29 февраля 2012

Попробуйте использовать [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>
8 голосов
/ 29 февраля 2012

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; }
    }

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