前提・実現したいこと
.NETのXmlSerializerについて質問させてください。
現在、RestAPIでサーバーからレンスポンスを受け取り、それを加工して画面に表示するアプリを作成しています。
レスポンスはXML形式なので、XmlSerializerを使ってオブジェクトクラスにデシリアライズしています。
その際、必要なデータのみをデシリアライズしたいのですが、オブジェクトクラスに定義されていないデータに関して以下のエラーメッセージが発生します。
該当のソースコードにおいて、XXXクラスと同様にYYYクラスを作成すればデータを読み込むことはできるのですが、
実際にはidがどのようなタイプで何件来るかわかっていません。
(ひょっとすると「<aaa:id xsi:type="bbb:ZZZ">3333</aaa:id>」というデータが返ってくるかもしれません。)
ですので、可能であればXXXのデータのみ読み込む、または全件読み込んだ後にXXXのデータを判別する方法があれば教えていただきたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
InvalidOperationException: 指定された型は認識されませんでした : name='YYY'、namespace='BBB'、場所 <id xmlns='AAA'>
デシリアライズしたいXML
XML
1<?xml version="1.0" encoding="UTF-8"?> 2<data xmlns:aaa="AAA" xmlns:bbb="BBB" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 3 <aaa:id xsi:type="bbb:XXX">1111</aaa:id> 4 <aaa:id xsi:type="bbb:YYY">2222</aaa:id> 5</data>
該当のソースコード
C#
1 // データモデル 2 public class data 3 { 4 [XmlElement(Namespace = "AAA")] 5 public List<Test> id { get; set; } 6 } 7 8 [XmlRoot(Namespace = "BBB")] 9 [XmlInclude(typeof(XXX))] 10 public class Test 11 { 12 [XmlText] 13 public string Value { get; set; } 14 } 15 16 [XmlRoot(Namespace = "BBB")] 17 public class XXX : Test 18 { 19 } 20 21 // デシリアライズ処理 22 using (var stream = File.OpenRead(XML_FILE_PATH)) 23 { 24 var xml = new XmlSerializer(typeof(data)); 25 var deserializeeObject = (data)xml.Deserialize(stream); 26 }
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2017
.NET Standard 2.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/29 15:47