私は次のXML文書デシリアライズしようとしています:空のコレクションでXMLSERIALIZE結果とコレクションをデシリアライズ
<?xml version="1.0" encoding="utf-8" ?>
<TestPrice>
<Price>
<A>A</A>
<B>B</B>
<C>C</C>
<Intervals>
<Interval>
<A>A</A>
<B>B</B>
<C>C</C>
</Interval>
<Interval>
<A>A</A>
<B>B</B>
<C>C</C>
</Interval>
</Intervals>
</Price>
</TestPrice>
をそして、私は三つのクラスは、オブジェクトグラフにこれをデシリアライズするために定義されています:
public class TestPrice
{
private List<Price> _prices = new List<Price>();
public List<Price> Price
{
get { return _prices; }
set { _prices = value; }
}
}
public class Price
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
private List<Interval> _intervals = new List<Interval>();
public List<Interval> Intervals
{
get { return _intervals; }
set { _intervals = value; }
}
}
public class Interval
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
私は各部分をデシリアライズすることができます。それは私が行うことができ、次のとおりです。
var serializer = new XmlSerializer(typeof(Price));
var priceEntity = ((Price)(serializer.Deserialize(XmlReader.Create(stringReader))));
そしてpriceEntity
が正しくList<Interval> Intervals
含むstringReader
、中に含まれているXMLデータで初期化されます。しかし、TestPrice
インスタンスを逆シリアル化しようとすると、常に空のList<Price> Price
が出現します。
私はこのようなTestPrice
の定義変更した場合:
public class TestPrice
{
public Price Price { get; set; }
}
をそれは動作します。もちろん、私のXSDはPriceをシーケンスと定義しています。デシリアライズしている他のエンティティもありますが、ルート要素にはシーケンスは含まれていません。私が気付いていない限界がありますか? TestPrice
に何らかのメタデータを含める必要がありますか?
私はあなたの例として提案されたように価格コレクションを飾りました。それでも私は空のプライスコレクションを取り戻す。ところで、なぜあなたはxmlReaderに既に持っているものではなく、新しいXmlReaderインスタンスをシリアライザに渡していますか? – Cesar
@Cesar、申し訳ありませんが、それは読者の間違いでした。私は私のサンプルを修正しました。今はうまくいくはずです。 –
おかしい、私はあなたの全く同じコードを実行し、それは動作します。しかし、それを私の実際のコードに適用すると、私は同じ結果を得ます。とにかく、少なくとも私はそれがうまくいくはずだから、私はそれを受け入れたものとしてマークしています。ありがとう! – Cesar