Fragmenty xml (xml nie podlega zmianie)
Problemem jest fragment dotyczący adresu, jest oznaczony tak samo <tns:Adres
<tns:Adres xsi:type="tns:TAdresPolski">
<tns:KodKraju>PL</tns:KodKraju>
<tns:Miejscowosc>string</tns:Miejscowosc>
<tns:Ulica>string</tns:Ulica>
<tns:NrDomu>string</tns:NrDomu>
<tns:KodPocztowy>13-551</tns:KodPocztowy>
</tns:Adres>
lub
<tns:Adres xsi:type="tns:TAdresZagraniczny">
<tns:KodKraju>MR</tns:KodKraju>
<tns:Miejscowosc>string</tns:Miejscowosc>
<tns:NrDomu>string</tns:NrDomu>
<tns:NrLokalu>string</tns:NrLokalu>
<tns:KodPocztowy>string</tns:KodPocztowy>
</tns:Adres>
Jest inny zestaw pól i inne określenie typu.
Chciałem wykorzystać polimorfizm i stworzyłem hierarchię klas
[Guid("80FAE6C3-DD76-44DE-8F18-95DB45AD0124")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[XmlTypeAttribute(TypeName = "TAdresPolski", Namespace = "http://ksef.mf.gov.pl/wzor/2021/08/05/08051/")]<---- TOTOTOTOTOTO
public class ADRES : IADRES
{
string kodkraju = "ADRES";
string miejscowosc = "ADRES";
string ulica = "ADRES";
string nrdomu = "ADRES";
string kodpocztowy = "ADRES";
public string KodKraju { get { return kodkraju; } set { kodkraju = value; } }
public string Miejscowosc { get { return miejscowosc; } set { miejscowosc = value; } }
public string Ulica { get { return ulica; } set { ulica = value; } }
public string NrDomu { get { return nrdomu; } set { nrdomu = value; } }
public string KodPocztowy { get { return kodpocztowy; } set { kodpocztowy = value; } }
}
[Guid("CF46E019-0A0F-418A-8BE0-71BB9E2839F9")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class ADRESPOLSKI : ADRES,IADRESPOLSKI
{
string kodkraju = "ADRESPOLSKI";
string miejscowosc = "ADRESPOLSKI";
string ulica = "ADRESPOLSKI";
string nrdomu = "ADRESPOLSKI";
string kodpocztowy = "ADRESPOLSKI";
public string KodKraju { get { return kodkraju; } set { kodkraju = value; } }
public string Miejscowosc { get { return miejscowosc; } set { miejscowosc = value; } }
public string Ulica { get { return ulica; } set { ulica = value; } }
public string NrDomu { get { return nrdomu; } set { nrdomu = value; } }
public string KodPocztowy { get { return kodpocztowy; } set { kodpocztowy = value; } }
}
[Guid("0AC12F3C-B03F-42A2-AB5F-51298F2FEE1B")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class ADRESZAGRANICZNY : ADRES,IADRESZAGRANICZNY
{
string kodkraju { get; set; }
string miejscowosc { get; set; }
string ulica { get; set; }
string nrdomu { get; set; }
string kodpocztowy { get; set; }
public string KodKraju { get { return kodkraju; } set { kodkraju = value; } }
public string Miejscowosc { get { return miejscowosc; } set { miejscowosc = value; } }
public string Ulica { get { return ulica; } set { ulica = value; } }
public string NrDomu { get { return nrdomu; } set { nrdomu = value; } }
public string KodPocztowy { get { return kodpocztowy; } set { kodpocztowy = value; } }
}
Ta hierarchia ma być dostępna poprzez bibliotekę typów (COM) dlatego GUID i [ComVisible(true)] itd.
Podsumowując
ADRESPOLSKI dziedziczy po ADRES
ADRESZAGRANICZNY dziedziczy po ADRES
Wszystko działa poza deserializacją w wierszu
<Adres xsi:type="tns:TAdresPolski">
lub
<Adres xsi:type="tns:TAdresZagraniczny">
jak usuwam linię kodu oznaczoną <---- TOTOTOTOTOTO to dostaje przy deserializacji, że nie rozpoznano typu TAdresPolski
Gdy dodaję tę linię to się deserializuje i jest ok
ale muszę przewidzieć TAdresZagraniczny, a nie mogę dodać kolejnego wpisu
[XmlTypeAttribute(TypeName = "<u>TAdresZagraniczny</u>", Namespace = "http://ksef.mf.gov.pl/wzor/2021/08/05/08051/")]
Pytanie:
Jakie atrybuty i gdzie należy użyć aby to się prawidłowo deserializowało?