0

私のエラーは次のとおりです。タイプ'System.Xml.Linq.XDocument'のオブジェクトをタイプにキャストできません

私はこのコードを実行しようとしています:

XmlSerializer s1 = new XmlSerializer(typeof(xdoc.toString()));

ここで、xdocの値は次のとおりです。

<root>
  <row1>
    <ing>john</ing>
  </row1>
  <row1>
    <ing>some name</ing>
  </row1>
  <row>
    <name>salad</name>
    <ID>8</ID>
  </row>
</root>

私はこのようなクラスを作成しました:

class Print {
    List<row1> row1 = new List<row1>();
    List<row> row = new List<row>();
}

public class row1
{
    public string ing { get; set; }
}

public class row
{
    public string name { get; set; }       
    public string ID { get; set; }
}

しかし、それは機能しません。私は何が間違っているのですか?

4

4 に答える 4

2

コンストラクターではXmlSerializer、値ではなく、シリアル化または逆シリアル化する型を渡す必要があります。オブジェクトに逆シリアル化しようとしている場合はPrint、を渡す必要がありますtypeof(Print)

また、コードが現在のところ、XmlSerializerクラスはルートノードがであると想定しているため、逆シリアル化は機能しませんPrint。これを修正するには、PrintクラスをXmlRoot属性で装飾し、の値を渡すことができますroot。そうすれば、コードはおそらく機能します。

編集: コードは機能しません。リストを表すためにXMLに追加の要素が必要になります。

<root>
  <ListOfrow1>
    <row1>...</row1>
  </ListOfrow1>
  ...
于 2012-10-03T16:35:43.473 に答える
2

質問が不完全であるというFurqanに同意しますが、XmlSerializerへの引数は、XDocumentではなくCLRオブジェクトのタイプである必要があります。私はそれが次のようなものでなければならないと思います

XmlSerializer s1 = new XmlSerializer(typeof(Print));
Print = (Print)s1.Deserialize(xdoc);
于 2012-10-03T16:38:27.980 に答える
1

XDocumentがある場合、XmlSerializerは必要ありません。Linqで十分です

List<row1> row1 = xDoc.Descendants("row1")
                .Select(x => new row1() { ing = x.Element("ing").Value })
                .ToList();

List<row> row = xDoc.Descendants("row")
                    .Select(x => new row() { 
                        name = x.Element("name").Value,
                        ID = x.Element("ID").Value 
                    })
                    .ToList();
于 2012-10-03T17:02:23.300 に答える
0

あなたが望むものとは思えないnew XmlSerializer(typeof(xdoc.toString()));、書き込もうとしているように見えます。new XmlSerializer(typeof(string));あなたはおそらくのようなものが欲しいでしょうXmlSerializer(typeof(Print))。サンプルはMSDN-XmlSerializerの記事にあります。

于 2012-10-03T16:33:41.667 に答える