Почему некоторые теги XML не десериализованы - PullRequest
1 голос
/ 13 марта 2020

Я использовал XSD, предоставленный извне, чтобы гееренировать кодовую базу C#, используя Xsd2Code. Каждый 'vergunning' и 'product' загружается при десериализации XML, кроме тега BeperkingAlgemeen. Я не могу понять, как манипулировать сгенерированным кодом, чтобы BeperkingAlgemeen включался при сериализации XML.

. Что меня удивляет, так это то, что повторяющиеся теги BeperkingenAlgemeen не имеют окружающего «списка / коллекции». тег.

Нет ошибки. Результат Vergunningen.Any (v => v.BeperkingenAlgemeen.Any ()) не дает результатов.

Xsd:

<xs:complexType name="Vergunning">
<xs:sequence>
  <xs:element name="PDCs" nillable="true" minOccurs="0" maxOccurs="1">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Product" nillable="true" minOccurs="0" maxOccurs="unbounded" type="Product">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="BeperkingenAlgemeenenAlgemeen" type="BeperkingenAlgemeen" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Vergunningnummer" type="xs:string" use="required" />
<xs:attribute name="StartDatum" type="xs:date" use="optional" />
<xs:attribute name="EindDatum" type="xs:date" use="optional" />  </xs:complexType>

Xml

      <Vergunningen>
    <Vergunning Vergunningnummer="12045521" StartDatum="2018-03-16">
      <PDCs>
        <Product ProductID="9ae90fa7-b276-e311-95d7-005056be011c" Omschrijving="Vermogen">
          <Dienst DienstID="fba1bc4a-e3fa-df11-bb5a-005056be6692" Omschrijving="Adviseren" StartDatum="2018-03-16" />
          <Dienst DienstID="faa1bc4a-e3fa-df11-bb5a-005056be6692" Omschrijving="Bemiddelen" StartDatum="2018-03-16" />
        </Product>
        <Product ProductID="fb84d39b-b276-e311-894a-005056be011d" Omschrijving="Schadeverzekeringen particulier">
          <Dienst DienstID="fba1bc4a-e3fa-df11-bb5a-005056be6692" Omschrijving="Adviseren" StartDatum="2018-03-16" />
          <Dienst DienstID="faa1bc4a-e3fa-df11-bb5a-005056be6692" Omschrijving="Bemiddelen" StartDatum="2018-03-16" />
        </Product>     
      </PDCs>
      <Beleidsbepalers>
        <Beleidsbepaler>
          <Initialen />
          <Tussenvoegsels />
          <Achternaam>Dorreboom</Achternaam>
          <MeisjesNaam />
          <MeisjesTussenvoegsels />
        </Beleidsbepaler>
      </Beleidsbepalers>
      <BeperkingenAlgemeen BeperkingID="FB60" StartDatum="1900-01-01">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met consumptief krediet</Omschrijving>
      </BeperkingenAlgemeen>
      <BeperkingenAlgemeen BeperkingID="FB60" StartDatum="2018-03-16">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met consumptief krediet</Omschrijving>
      </BeperkingenAlgemeen>
      <BeperkingenAlgemeen BeperkingID="FB61" StartDatum="2018-03-16">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met hypothecair krediet</Omschrijving>
      </BeperkingenAlgemeen>
      <BeperkingenAlgemeen BeperkingID="FB62" StartDatum="2018-03-16">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met vermogen</Omschrijving>
      </BeperkingenAlgemeen>
      <BeperkingenAlgemeen BeperkingID="FB46" StartDatum="2018-03-16">
        <Omschrijving>Met betrekking tot schadeverzekeringen particulier is het uitsluitend toegestaan de financiële dienst te verrichten voor opstal- en inboedelverzekeringen in combinatie met hypothecair krediet.</Omschrijving>
      </BeperkingenAlgemeen>
    </Vergunning>
  </Vergunningen>

Сгенерированный C# код:

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "4.2.0.31")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.afm.nl/WfdExternRegister/Export/3.0")]
    public partial class Vergunning
    {

        private List<Product> _pDCs;

        private List<Beperking> _beperkingenAlgemeen;

        private string _vergunningnummer;

        private System.Nullable<System.DateTime> _startDatum;

        private System.Nullable<System.DateTime> _eindDatum;

        [System.Xml.Serialization.XmlArrayAttribute(IsNullable=true, Order=0)]
        public List<Product> PDCs
        {
            get
            {
                return this._pDCs;
            }
            set
            {
                this._pDCs = value;
            }
        }

        [System.Xml.Serialization.XmlElementAttribute("BeperkingenAlgemeenenAlgemeen", Order=1)]
        public List<Beperking> BeperkingenAlgemeen
        {
            get
            {
                return this._beperkingenAlgemeen;
            }
            set
            {
                this._beperkingenAlgemeen = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Vergunningnummer
        {
            get
            {
                return this._vergunningnummer;
            }
            set
            {
                this._vergunningnummer = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute(DataType="date")]
        public System.DateTime StartDatum
        {
            get
            {
                if (this._startDatum.HasValue)
                {
                    return this._startDatum.Value;
                }
                else
                {
                    return default(System.DateTime);
                }
            }
            set
            {
                this._startDatum = value;
            }
        }

        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool StartDatumSpecified
        {
            get
            {
                return this._startDatum.HasValue;
            }
            set
            {
                if (value==false)
                {
                    this._startDatum = null;
                }
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute(DataType="date")]
        public System.DateTime EindDatum
        {
            get
            {
                if (this._eindDatum.HasValue)
                {
                    return this._eindDatum.Value;
                }
                else
                {
                    return default(System.DateTime);
                }
            }
            set
            {
                this._eindDatum = value;
            }
        }

        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool EindDatumSpecified
        {
            get
            {
                return this._eindDatum.HasValue;
            }
            set
            {
                if (value==false)
                {
                    this._eindDatum = null;
                }
            }
        }
    }

BeperkingAlgemeen

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "4.2.0.31")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.afm.nl/WfdExternRegister/Export/3.0")]
public partial class Beperking
{

    private string _omschrijving;

    private string _beperkingID;

    private System.DateTime _startDatum;

    private System.Nullable<System.DateTime> _eindDatum;

    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public string Omschrijving
    {
        get
        {
            return this._omschrijving;
        }
        set
        {
            this._omschrijving = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string BeperkingID
    {
        get
        {
            return this._beperkingID;
        }
        set
        {
            this._beperkingID = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute(DataType="date")]
    public System.DateTime StartDatum
    {
        get
        {
            return this._startDatum;
        }
        set
        {
            this._startDatum = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute(DataType="date")]
    public System.DateTime EindDatum
    {
        get
        {
            if (this._eindDatum.HasValue)
            {
                return this._eindDatum.Value;
            }
            else
            {
                return default(System.DateTime);
            }
        }
        set
        {
            this._eindDatum = value;
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool EindDatumSpecified
    {
        get
        {
            return this._eindDatum.HasValue;
        }
        set
        {
            if (value==false)
            {
                this._eindDatum = null;
            }
        }
    }
}

Полный XSD

1 Ответ

2 голосов
/ 13 марта 2020

Множество проблем, но самые конкретные c здесь:

  • удалить все Order = ... биты; они не правы и ломают это
  • xsd и xml не согласны; Похоже, что xml должно быть <BeperkingenAlgemeenenAlgemeen>
  • , пространства имен неясны, и вам не хватает элемента root

Но; это работает:

using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

static class P
{
    static void Main()
    {
        var ser = new XmlSerializer(typeof(Vergunningen));
        var v = (Vergunningen)ser.Deserialize(new StringReader(xml));
        System.Console.WriteLine(v.Vergunning.Vergunningnummer);
        System.Console.WriteLine(v.Vergunning.PDCs.Count);
        System.Console.WriteLine(v.Vergunning.BeperkingenAlgemeen.Count);
    }
    const string xml = @"<Vergunningen>
    <Vergunning Vergunningnummer=""12045521"" StartDatum=""2018-03-16"">
      <PDCs>
        <Product ProductID=""9ae90fa7-b276-e311-95d7-005056be011c"" Omschrijving=""Vermogen"">
          <Dienst DienstID=""fba1bc4a-e3fa-df11-bb5a-005056be6692"" Omschrijving=""Adviseren"" StartDatum=""2018-03-16"" />
          <Dienst DienstID=""faa1bc4a-e3fa-df11-bb5a-005056be6692"" Omschrijving=""Bemiddelen"" StartDatum=""2018-03-16"" />
        </Product>
        <Product ProductID=""fb84d39b-b276-e311-894a-005056be011d"" Omschrijving=""Schadeverzekeringen particulier"">
          <Dienst DienstID=""fba1bc4a-e3fa-df11-bb5a-005056be6692"" Omschrijving=""Adviseren"" StartDatum=""2018-03-16"" />
          <Dienst DienstID=""faa1bc4a-e3fa-df11-bb5a-005056be6692"" Omschrijving=""Bemiddelen"" StartDatum=""2018-03-16"" />
        </Product>     
      </PDCs>
      <Beleidsbepalers>
        <Beleidsbepaler>
          <Initialen />
          <Tussenvoegsels />
          <Achternaam>Dorreboom</Achternaam>
          <MeisjesNaam />
          <MeisjesTussenvoegsels />
        </Beleidsbepaler>
      </Beleidsbepalers>
      <BeperkingenAlgemeenenAlgemeen BeperkingID=""FB60"" StartDatum=""1900-01-01"">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met consumptief krediet</Omschrijving>
      </BeperkingenAlgemeenenAlgemeen>
      <BeperkingenAlgemeenenAlgemeen BeperkingID=""FB60"" StartDatum=""2018-03-16"">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met consumptief krediet</Omschrijving>
      </BeperkingenAlgemeenenAlgemeen>
      <BeperkingenAlgemeenenAlgemeen BeperkingID=""FB61"" StartDatum=""2018-03-16"">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met hypothecair krediet</Omschrijving>
      </BeperkingenAlgemeenenAlgemeen>
      <BeperkingenAlgemeenenAlgemeen BeperkingID=""FB62"" StartDatum=""2018-03-16"">
        <Omschrijving>Met betrekking tot inkomensverzekeringen is het uitsluitend toegestaan de financiële dienst te verrichten voor betalingsbeschermers (overlijdensrisico-, arbeidsongeschiktheids- en werkloosheidsverzekeringen) in combinatie met vermogen</Omschrijving>
      </BeperkingenAlgemeenenAlgemeen>
      <BeperkingenAlgemeenenAlgemeen BeperkingID=""FB46"" StartDatum=""2018-03-16"">
        <Omschrijving>Met betrekking tot schadeverzekeringen particulier is het uitsluitend toegestaan de financiële dienst te verrichten voor opstal- en inboedelverzekeringen in combinatie met hypothecair krediet.</Omschrijving>
      </BeperkingenAlgemeenenAlgemeen>
    </Vergunning>
  </Vergunningen>";
}

public class Vergunningen
{
    public Vergunning Vergunning { get; set; }
}

public class Product { }
[System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "4.2.0.31")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
// [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.afm.nl/WfdExternRegister/Export/3.0")]
public partial class Vergunning
{

    private List<Product> _pDCs;

    private List<Beperking> _beperkingenAlgemeen;

    private string _vergunningnummer;

    private System.Nullable<System.DateTime> _startDatum;

    private System.Nullable<System.DateTime> _eindDatum;

    [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)]
    public List<Product> PDCs
    {
        get
        {
            return this._pDCs;
        }
        set
        {
            this._pDCs = value;
        }
    }

    [System.Xml.Serialization.XmlElementAttribute("BeperkingenAlgemeenenAlgemeen")]
    public List<Beperking> BeperkingenAlgemeen
    {
        get
        {
            return this._beperkingenAlgemeen;
        }
        set
        {
            this._beperkingenAlgemeen = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Vergunningnummer
    {
        get
        {
            return this._vergunningnummer;
        }
        set
        {
            this._vergunningnummer = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute(DataType = "date")]
    public System.DateTime StartDatum
    {
        get
        {
            if (this._startDatum.HasValue)
            {
                return this._startDatum.Value;
            }
            else
            {
                return default(System.DateTime);
            }
        }
        set
        {
            this._startDatum = value;
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool StartDatumSpecified
    {
        get
        {
            return this._startDatum.HasValue;
        }
        set
        {
            if (value == false)
            {
                this._startDatum = null;
            }
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute(DataType = "date")]
    public System.DateTime EindDatum
    {
        get
        {
            if (this._eindDatum.HasValue)
            {
                return this._eindDatum.Value;
            }
            else
            {
                return default(System.DateTime);
            }
        }
        set
        {
            this._eindDatum = value;
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool EindDatumSpecified
    {
        get
        {
            return this._eindDatum.HasValue;
        }
        set
        {
            if (value == false)
            {
                this._eindDatum = null;
            }
        }
    }
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "4.2.0.31")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
// [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.afm.nl/WfdExternRegister/Export/3.0")]
public partial class Beperking
{

    private string _omschrijving;

    private string _beperkingID;

    private System.DateTime _startDatum;

    private System.Nullable<System.DateTime> _eindDatum;

    [System.Xml.Serialization.XmlElementAttribute()]
    public string Omschrijving
    {
        get
        {
            return this._omschrijving;
        }
        set
        {
            this._omschrijving = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string BeperkingID
    {
        get
        {
            return this._beperkingID;
        }
        set
        {
            this._beperkingID = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute(DataType = "date")]
    public System.DateTime StartDatum
    {
        get
        {
            return this._startDatum;
        }
        set
        {
            this._startDatum = value;
        }
    }

    [System.Xml.Serialization.XmlAttributeAttribute(DataType = "date")]
    public System.DateTime EindDatum
    {
        get
        {
            if (this._eindDatum.HasValue)
            {
                return this._eindDatum.Value;
            }
            else
            {
                return default(System.DateTime);
            }
        }
        set
        {
            this._eindDatum = value;
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool EindDatumSpecified
    {
        get
        {
            return this._eindDatum.HasValue;
        }
        set
        {
            if (value == false)
            {
                this._eindDatum = null;
            }
        }
    }
}
...