Имеется следующий код:
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Test
{
class Program
{
static XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { new XmlQualifiedName("") });
static void Main(string[] args)
{
string path = @"D:\Temp\1.xml";
People test = new People { Name = "Sarah", Address = "" };
XmlSerializer ser = new XmlSerializer(typeof(People));
using (Stream stream = File.Create(path))
ser.Serialize(stream, test, emptyNamespaces);
}
}
public class People
{
public string Name { get; set; }
public string Address { get; set; }
}
}
После выполнения получаю xml следующего содержания:
<?xml version="1.0"?>
<People>
<Name>Sarah</Name>
<Address />
</People>
Требуется чтобы при пустой строке xml содержал также открывающий и закрывающий теги:
<?xml version="1.0"?>
<People>
<Name>Sarah</Name>
<Address></Address>
</People>
Как сделать это?
Набросал такое регулярное выражение для замены, вроде работает корректно (есть специалисты по регекспам?):
string s2 = Regex.Replace(s1, @"<(\w+)\s*/>", @"<$1></$1>");
Возможно ли на его основе состряпать адаптер для потока? Как это сделать?
Это можно сделать через кастомный XmlTextWriter
, который будет принудительно писать полный закрывающий элемент:
public class MyXmlTextWriter : XmlTextWriter
{
public MyXmlTextWriter(Stream stream) : base(stream, Encoding.UTF8)
{
}
public override void WriteEndElement()
{
base.WriteFullEndElement();
}
}
static void Main(string[] args)
{
string path = @"D:\Temp\1.xml";
People test = new People { Name = "Sarah", Address = "" };
XmlSerializer ser = new XmlSerializer(typeof(People));
using (Stream stream = File.Create(path))
{
using (var writer = new MyXmlTextWriter(stream))
{
ser.Serialize(writer , test, emptyNamespaces);
}
}
}
взято с http://stackoverflow.com/questions/13539555/prevent-self-closing-tags-in-xmlserializer-when-no-data-is-present
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не могу организовать рекурсиюПодскажи, где нужно исправить, чтобы функция правильно работала
Как получить число (int), полученное в результате такого SQL-запроса:
Всем привет, проблема такая, что не могу сделать запись в определенный файл, создается всегда новый файл
Есть задача создания печатного документа из приложения на c# в vs2015Документ нужен очень четких размеров и расположения элементов в форме