Контроль формата Guid с использованием xml сериализатора - PullRequest
0 голосов
/ 30 марта 2020

У меня проблема с контролем того, как сериализатор xml форматирует Guid.

В любом случае можно ли принудительно заставить свойство первого примера исключить дефисы, используя XmlSerialzer?

пример:

public class Example{
   [XmlElement]
   public Guid Value {get; set;}
}

при сериализации вышеуказанного класса я получу: (36 символов)

<Example>
  <Value>3164fc09-1dc5-4629-b04c-e9cdc5e85de4</Value>
</Example>

, но я хочу, чтобы значение не включало тире (32 символы)

<Example>
  <Value>06102471381242609d0176b269120082</Value>
</Example>

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

Я знаю, что могу сделать что-то подобное, чтобы решить проблему, но это грязно, и я хотел бы избежать этого:

public class Example
{
    [XmlIgnore]
    public Guid Value { get; set; }
    [XmlElement(nameof(Value))]
    public string ValueString {
        get => Value.ToString("N");
        set
        {
            if (Guid.TryParse(value, out var uuid))
                Value = uuid;
            else
                throw new InvalidOperationException();
        }
    }
}

Предоставлено xsd

xsd, предоставляемый этой компанией, определяет настраиваемый тип как строку с диапазоном от 1 до 35 символов, но в их документации указано, что значение всегда должно быть uuid версии 4 без тире и длиной до 32 символов.

документация предоставляется только с версией * dan sh.

См. стр. 5 сек 01.07.2016 UUID i EpisodeOfCareIdentifier для уточнения c проблема.

о стандарте (необязательное чтение):

Этот стандарт является частью службы сообщений между округами, больницами и другими независимыми специалистами здравоохранения, касающейся пациента лечения. В целом, существует немало программных систем, которые должны реализовывать этот стандарт.

...