Нужна помощь Десериализация документа C-CDA - PullRequest
0 голосов
/ 06 июня 2019

Я использовал Вставить XML в качестве классов в Visual Studio, которая, кажется, работает нормально, но я получаю сообщение об ошибке при попадании атрибутов xsi: type в файл.

После связкипоиска я обнаружил, что это распространенная проблема с Paste XML as Classes, потому что он не обрабатывает полиморфные подтипы.Я также обнаружил, что вы можете исправить это, добавив XML include в класс, имеющий тип xsi: type, и создайте производный класс для этого типа.Поэтому, если в моем XML есть xsi: type = "urn: CD" в одном из элементов, я могу добавить [XMLInclude (typeof (CD))] к соответствующему классу и создать класс "CD", который наследуется от класса элемента.Вот так:

    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:hl7-org:v3")]
    [System.Xml.Serialization.XmlInclude(typeof(CD))]
    public partial class ClinicalDocumentComponentComponentSectionEntryObservationValue
    {
        ...//
    }

    [System.Xml.Serialization.XmlType("CD", Namespace = "urn:hl7-org:v3")]
    public class CD : ClinicalDocumentComponentComponentSectionEntryObservationValue
    { }

Это работает для этого класса Element, но проблема в том, что у меня есть несколько классов, вызывающих один и тот же xsi: type = "urn: CD"

Как мне сделатькласс CD, доступный любому вызывающему классу, который нуждается в нем, поскольку у меня не может быть нескольких базовых классов.Например, пример ниже, где у меня есть два класса, которые должны использовать класс CD.Единственный, кто правильно его использует, это класс ClinicalDocumentComponentComponentSectionEntryObservationValue:

    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:hl7-org:v3")]
    [System.Xml.Serialization.XmlInclude(typeof(CD))]
    public partial class ClinicalDocumentComponentComponentSectionEntryActEntryRelationshipObservationEntryRelationshipObservationValue
    {
        ...//
    }

    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:hl7-org:v3")]
    [System.Xml.Serialization.XmlInclude(typeof(CD))]
    public partial class ClinicalDocumentComponentComponentSectionEntryObservationValue
    {
        ...//
    }

    [System.Xml.Serialization.XmlType("CD", Namespace = "urn:hl7-org:v3")]
    public class CD : ClinicalDocumentComponentComponentSectionEntryObservationValue
    { }
...