前提・実現したいこと
c#のXmlSerializerでxmlファイルを読み込む際、クラスに存在しないメンバがxmlファイルに書かれていることを検出したいです。
発生している問題・エラーメッセージ
下記のc#コードで下記xmlファイルを読むと、エラーが出ることなくlistにはPerson 1,2が入ります。
これを、エラーを出す(検出できる)ようにしたいです。
該当のソースコード
c#
1 public class Team 2 { 3 public List<Person> list; 4 5 public static Team Load(string filepath) 6 { 7 try 8 { 9 XmlSerializer serializer = new XmlSerializer(typeof(Team)); 10 StreamReader sr = new StreamReader(filepath, new UTF8Encoding(false)); //ファイルを開く 11 Team ret = (Team)serializer.Deserialize(sr); //XMLファイルから読み込み、逆シリアル化する 12 sr.Close();//閉じる 13 return ret; 14 } 15 catch 16 { 17 return null; 18 } 19 } 20 } 21 22 public class Person 23 { 24 public string id; 25 public string name; 26 } 27 28 public partial class Form1 : Form 29 { 30 private void button1_Click(object sender, EventArgs e) 31 { 32 Team team = Team.Load("test.xml"); // Load失敗ならnull 33 } 34 } 35
xml
1<?xml version="1.0" encoding="utf-8"?> 2<Team xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3 <list> 4 <Person> 5 <id>1</id> 6 <name>A</name> 7 </Person> 8 <Person> 9 <id>2</id> 10 <name>B</name> 11 <Person> 12 <id>3</id> 13 <name>C</name> 14 </Person> 15 </Person> 16 </list> 17</Team>
XMLファイルの誤りを検出したいってことですか?
一言で表現するのが難しいのですが、XMLファイルの誤りを検出したいです。
例えば上記XMLファイルの末尾の</Team>の抜け、という誤りは上記コードで既に検出できていますので、検出したい内容は(正しい表現かわかりませんが)「TeamクラスメンバとXMLファイルの構造が一致しているかどうか」ということになると思います。
XMLファイルの検証はXMLSchema(xsd)にて行うのが筋です。
ただしXMLSchemaが用意されていない場合には、正しいXMLファイルがあれば、
XMLファイルから生成することが可能です。
また、シリアライズ先のクラスもXMLファイルからの自動生成が便利です。
本来は定義(XMLSchema)ありきで、データ(XMLファイル)も実装(クラス)もそれを元に
作るのが原則であることだけは忘れないでください。
以上、考え方のアドバイスだけで回答ではありません。
ありがとうございます。XMLSchemaを知りませんでしたので、確認させていただきます。
回答1件
あなたの回答
tips
プレビュー