xmlファイルをc#クラスにデシリアライズしようとしています。私はXMLファイルの構造がかなり複雑であるため、私はクラスを生成するためにオンラインツールを使用しました。これは、メインクラスのListプロパティに繰り返されるアイテムの数を除いて、うまくいきました。XMLからの非直列化時にリストプロパティが設定されない
私はWPFでDotNet 4.5、C#を使用しています。
<orderMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:gs1:ecom:order:xsd:3">
<order xmlns="">
<creationDateTime>2017-07-10T00:00:00</creationDateTime>
<documentStatusCode>ORIGINAL</documentStatusCode>
<documentActionCode>ADD</documentActionCode>
</order>
<order xmlns="">
<creationDateTime>2017-07-10T00:00:00</creationDateTime>
<documentStatusCode>ORIGINAL</documentStatusCode>
<documentActionCode>ADD</documentActionCode>
</order>
</orderMessage>
私が使用していたクラスは以下の通りです::次のように
[XmlRoot(ElementName = "order")]
public class Order
{
[XmlElement(ElementName = "creationDateTime")]
public string CreationDateTime { get; set; }
[XmlElement(ElementName = "documentStatusCode")]
public string DocumentStatusCode { get; set; }
[XmlElement(ElementName = "documentActionCode")]
public string DocumentActionCode { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
}
[XmlRoot(ElementName = "orderMessage", Namespace = "urn:gs1:ecom:order:xsd:3")]
public class OrderMessage
{
[XmlElement(ElementName = "order")]
public List<Order> Order { get; set; }
[XmlAttribute(AttributeName = "xsd", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsd { get; set; }
[XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsi { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
}
デシリアライズコードは次のように
xmlファイルの簡易版である
XmlSerializer serializer = new XmlSerializer(typeof(OrderMessage));
StreamReader reader = new StreamReader(filename);
OrderMessage newOrderMessage;
try
{
newOrderMessage = (OrderMessage)serializer.Deserialize(reader);
}
catch (Exception e)
{
throw e;
}
reader.Close();
コードを実行するとエラーなしで実行されますが、空のリストになります。 xmlには他の構造がありました(繰り返し構造ではないためリストプロパティはありません)。
私は似たような質問をいくつか見ましたが、私が使っているのと同じ方法を示唆しているようです。
私はそのままXMLを第三者から変更することはできません。
誰かが私を正しい方向に向けることができれば、大変感謝しています。
私は、エラーをキャッチしてそれを使用することはまったくないことを知っていますが、ブレークポイントを追加するようにしたので、内部例外があれば見れます。私は一度プロセスが働いたら、エラー処理をより意味のあるものにします。
リストを表すへの親がないので、私はそれが起こっているとは思わない。それはテスト順序1回の テストの注文2 –
@VarunMehta私はそれを試してみましたが、それはまだあなたが受注にあなたの財産とXML要素名の名前を変更しました同じこと – james33
をしたようなものでなければなりませんか?XmlElement(ElementName = "orders")] 公開リスト注文{get;セット; } –