[ad_1]
アプリケーションから 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
コード :
List
文字列 xmlPath = ConfigurationManager.AppSettings[“AgentMaintenanceEventServerXML”];
List
試す
{
XDocument XmlData = XDocument.Load(xmlPath);
using (FileStream fileStream = new FileStream(xmlPath, FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(List
data = (List
}
}
キャッチ(例外例)
{
}
解決策はありますか?
解決策 5
<EventServerData> <AssetCodes> <AssetCode> AST-100</AssetCode> <EventServerPort>1111</EventServerPort> <EventServerIPAddress> 192.1.1.2</EventServerIPAddress> </AssetCodes> </EventServerData>
[ad_2]
コメント