Как сформировать действительный XSD, который помогает в сериализации в классы c # - PullRequest
2 голосов
/ 19 июня 2019

Я разработал XSD, который определяет стандарты, и это помогает в общении двух приложений.Приложение A и B.

Приложение A правильно читает XML-данные из B.Но когда он пытается преобразовать / сериализовать те же данные в xml, он сериализуется неправильно.

Примеры XML: (хочет вроде как)

   <Field>
      <FieldId>1</FieldId>
       <FieldType>  
          <FieldTypeString>John</FieldTypeString>
       </FieldType>
    <\Field>
or
    <Field>
      <FieldId>2</FieldId>
      <FieldType>  
        <FieldTypeInteger>30</FieldTypeString>
      </FieldType>
    <\Field>

 or   
    <Field>
      <FieldId>3</FieldId>
      <FieldType>  
        <FieldTypeDate>19/06/2019</FieldTypeString>
      </FieldType>
    <\Field>

Эквивалентный XSD: enter image description here

Эквивалентный класс C #:

public partial class FieldGroupFieldColumnFieldFieldType
{

    private object itemField;

    private ItemChoiceType itemElementNameField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeCheckedUnChecked", typeof(bool))]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeDate", typeof(System.DateTime), DataType = "date")]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeFloat", typeof(decimal))]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeInteger", typeof(string), DataType = "integer")]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeString", typeof(string))]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeTime", typeof(System.DateTime), DataType = "time")]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeYESNO", typeof(bool))]
    [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
    public object Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            this.itemField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public ItemChoiceType ItemElementName
    {
        get
        {
            return this.itemElementNameField;
        }
        set
        {
            this.itemElementNameField = value;
        }
    }
}

Приложение A отлично анализирует XML из BНо когда он сам генерирует XML, он выглядит следующим образом.

<Field>
      <FieldId>1</FieldId>
       <FieldType>  
          <Item>John</FieldTypeString>
          <ItemElementName>2</ItemElementName>
       </FieldType>
<\Field>

Я думаю, что свойство XSD / class нужно изменить!

Любые предложения по этому поводу будут высоко оценены.

1 Ответ

2 голосов
/ 19 июня 2019

Используйте xsd.exe для перевода xsd в C #, не выполняйте вручную.

Кроме того, для удобства чтения вы должны изолировать сложные типы.Если элемент содержит комплексный тип, объявите комплексный тип как именованный тип в корне XSD, а не внутри элемента.

При объявлении элемента, тогда указывайте комплексный тип с помощью xs:type="tns:complextypename"

РЕДАКТИРОВАТЬ: То же самое относится к простым типам.

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