【解決方法】エラー < xmlns=''> を示すオブジェクトのリストに XML をデシリアライズすることは想定されていませんでした。


アプリケーションから SOAP サービスを使用しています。コード内の .wsdl ファイルを使用する応答として、次の XMl コンテンツを取得します。

<Vehicles>
    <FourWheeler>
        <Availability>
            <Brand>Toyota</Brand>
            <Model>Fortuner</Model>
            <Country>Japan</Country>
            <Cost>90000</Cost>           
        </Availability>
        <Availability>
            <Brand>Hyundai</Brand>
            <Model>Elentra</Model>
            <Country>South Korea</Country>
            <Cost>75000</Cost>           
        </Availability>
        <Availability>
            <Brand>Volkswagan</Brand>
            <Model>Polo</Model>
            <Country>Gremany</Country>
            <Cost>95000</Cost>                   
        </Availability>
        <Availability>
            <Brand>Tata</Brand>
            <Model>Nano</Model>
            <Country>25000</Country>
            <Cost></Cost>                    
        </Availability>
    </Outbound>
    <TwoWheeler></TwoWheeler>
</Vehicles>

この方法で XML を逆シリアル化するようにクラスを設計しました::

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

using System.Xml.Serialization;
namespace ConsoleApp2
{
    [XmlRoot("Vehicles")]
    public class Vehicles
    {
        [XmlElement("FourWheeler")]
        public FourWheeler FourWheeler
        {
            get;
            set;
        }
    }

    [XmlRoot("FourWheeler")]
    public class FourWheeler
    {
        [XmlElement("Availability")]
        public Vehicles Availability
        {
            get;
            set;
        }
    }

    [XmlRoot("Availability")]
    public class Availability
    {

        [XmlElement("Brand")]
        public string Brand
        {
            get;
            set;
        }

        [XmlElement("Model")]
        public string Model
        {
            get;
            set;
        }


        [XmlElement("Country")]
        public string Country
        {
            get;
            set;
        }

        [XmlElement("Cost")]
        public string Cost
        {
            get;
            set;
        }
    }
}

XMLをリストに逆シリアル化する私のコードは次のとおりです。

XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Vehicles>));
System.IO.StreamReader sr = new System.IO.StreamReader("E:\\xmlTier.txt");
List<Vehicles> flightavailabilitylst = (List<Vehicles>)xmlSerializer.Deserialize(sr);

行でエラーが発生しています

List<Vehicles> flightavailabilitylst = (List<Vehicles>)xmlSerializer.Deserialize(sr);

:

System.InvalidOperationException: 'There is an error in XML document (1, 2).'

InvalidOperationException: <Vehicles xmlns=''> was not expected.

何が間違っているのか、XMLをオブジェクトのリストに変換する正しいアプローチは何ですか?

私が試したこと:

XML を見ると、階層は Vehicles > FourWheeler > List of Availability です… そこで、コードを追加しました。

XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "Vehicles";
xRoot.IsNullable = true;

これは私を助けませんでした。

解決策 1

xml が無効です。 交換

</Outbound>
<TwoWheeler></TwoWheeler>

</FourWheeler>

XML は、それらのリストではなく単一の車両ノードを表すため、それに応じてコードを変更します

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Vehicles));
System.IO.StreamReader sr = new System.IO.StreamReader( ... );

Vehicles flightavailabilitylst = (Vehicles)xmlSerializer.Deserialize(sr);

また、Availability は Available オブジェクトのリストであり、単一の Vehicles オブジェクトではありません。

[XmlRoot("FourWheeler")]
public class FourWheeler
{
    [XmlElement("Availability")]
    public List<Availability> Availability
    {
        get;
        set;
    }
}

解決策 2

「FourWheeler」タグと「Outbound」タグが「一致しません」。

つまり、XML が無効です。

解決策 3

<Vehicles>
    <FourWheeler>
        <Availability>
            <Brand>Toyota</Brand>
            <Model>Fortuner</Model>
            <Country>Japan</Country>
            <Cost>90000</Cost>           
        </Availability>
        <Availability>
            <Brand>Hyundai</Brand>
            <Model>Elentra</Model>
            <Country>South Korea</Country>
            <Cost>75000</Cost>           
        </Availability>
        <Availability>
            <Brand>Volkswagan</Brand>
            <Model>Polo</Model>
            <Country>Gremany</Country>
            <Cost>95000</Cost>                   
        </Availability>
        <Availability>
            <Brand>Tata</Brand>
            <Model>Nano</Model>
            <Country>25000</Country>
            <Cost></Cost>                    
        </Availability>
    </FourWheeler>
    <TwoWheeler></TwoWheeler>
</Vehicles>

XML が更新されました。 それでも同じエラーが表示されます。

解決策 4

読み取り中の XML エラー

例外 : は予期されていませんでした。
メッセージ : XML ドキュメント (1、2) にエラーがあります。

XML:
<イベントサーバーデータ>
<資産コード>
<資産コード> AST-100
<イベントサーバーポート>1111
<イベントサーバーの IP アドレス> 192.1.1.2

XML

コード :

List Items = new List();
文字列 xmlPath = ConfigurationManager.AppSettings[“AgentMaintenanceEventServerXML”];
List データ = null;
試す
{
XDocument XmlData = XDocument.Load(xmlPath);
using (FileStream fileStream = new FileStream(xmlPath, FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(List));
data = (List)serializer.Deserialize(fileStream);
}

}
キャッチ(例外例)
{

}

解決策はありますか?

解決策 5

<EventServerData>
  <AssetCodes>
    <AssetCode> AST-100</AssetCode>
    <EventServerPort>1111</EventServerPort>
    <EventServerIPAddress> 192.1.1.2</EventServerIPAddress>
  </AssetCodes>
</EventServerData>

コメント

タイトルとURLをコピーしました