Как я могу в .net сериализовать GUID без дефисов?

270
01 августа 2017, 14:39

Как я могу в .net сериализовать в формат XML GUID без дефисов?

Структура выходного документа не важна. Необходимо, например, вместо <RqUID>5c88f0fc-9edf-4428-9ee1-b28ba2a5f03c</RqUID> получить <RqUID>5c88f0fc9edf44289ee1b28ba2a5f03c</RqUID>

Answer 1

В качестве воркэраунда можно использовать такую конструкцию:

public class Data
{
    public int X { get; set; }
    [XmlIgnore] // это не сериализуем
    public Guid Y { get; set; }
    [XmlElement(ElementName = "Y")] // а вместо Y сериализуем вот это
    public string YSerializable
    {
        get => Y.ToString("N");
        set => Y = Guid.Parse(value);
    }
}

Получаем XML:

<?xml version="1.0" encoding="utf-16"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <X>1</X>
  <Y>0102030405060708090a0b0c0d0e0f10</Y>
</Data>

Минус: лишнее свойство, нужное лишь для сериализации.

В качестве альтернативы, можно реализовать IXmlSerializable. Но это, наверное, больше мороки.

READ ALSO
Drag &amp; Drop ListView

Drag & Drop ListView

Ребят подскажите пожалуйстаЕсть проект с перетаскиванием файла

336
Платные расширения приложения

Платные расширения приложения

ЗдравствуйтеЗанят разработкой приложения

316
C# / Try-Catch для большого колличества строк кода

C# / Try-Catch для большого колличества строк кода

Подскажите пожалуйста как лучше обработать исключения, которые могут возникнуть в процессе конвертации? строчек очень много, база спроектирована...

344
Задача в новом потоке по таймеру

Задача в новом потоке по таймеру

Есть метод который работает в отдельном от GUI потоке - обновляет коллекцию сообщений, которые получает из БДМетод запускается по таймеру...

275