XMLドキュメントをリスト<にデシリアライズしようとしています。私の目標は、リスト<にXML文書からのデータを返すパブリック静的メソッドがあることです。ここでXMLドキュメントをリスト<>にデシリアライズしてアイテム名をオーバーライドする方法
はXMLである:ここでは
<?xml version="1.0"?>
<root>
<item>
<name>Blue</name>
</item>
<item>
<name>Red</name>
</item>
</root>
は、アイテム(BillingItem.cs)のためのクラスです。ここ
using System;
using System.Xml.Serialization;
namespace DeserializeExample
{
[Serializable]
[XmlRoot("item")]
public class BillingItem
{
[XmlElement("name")]
public string Description { get; set; }
}
}
は、リスト(BillingItems.cs)であるクラスです。
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace DeserializeExample
{
[Serializable]
[XmlRoot("root")]
public class BillingItems : List<BillingItem>
{
public static BillingItems GetBillingItems()
{
using (TextReader reader = new StreamReader("BillingItems.xml"))
{
XmlSerializer serializer = new XmlSerializer(typeof(BillingItems));
return (BillingItems)serializer.Deserialize(reader);
}
}
}
}
そして、ここで私はリスト(Program.csを)を取得できるようにしたいと思います方法の例を使用してコンソールアプリです:
namespace DeserializeExample
{
class Program
{
static void Main(string[] args)
{
BillingItems billingItems = BillingItems.GetBillingItems();
}
}
}
コンソールアプリケーションを実行すると、リストは空になります。私はそれがどのように属性を使用しているかに関係していると思いますが、この作業をどのように行うかを決めることはできません。
例がシンプルで、うまく説明され、誰かが助けてくれることを願っています。
ご回答いただきありがとうございます。実際にはうまくいくと考えております。しかし、私はこれを単純なままにしておきたいという私の元の投稿には言及していませんでしたが、私はCSLAフレームワークを利用する既存のアプリケーションに新しい機能を追加しています。このフレームワークでは、物のリストは特別なリスト(BusinessListBase)として実装されています。そこでは、すべての物のリストがそれ自身のリストを返すpublic staticメソッドを持っています。だから私はあなたが提案するカプセル化クラスを使用しないようにする必要があります。 –
@Doug私が言うことは、コアアプリケーションとは異なり、シリアライゼーションの境界で微妙に異なる表現をすることが必要なことです(実際には望ましいことです)。私は単にこれを上記の例として書き留めます(シリアライゼーション層を通過する直前にラップしてください)。それは、少なくとも私がやることです。 –
私は理解していますが、アプリケーション全体がビルドされています。「物事」のリストが必要な場合は、単純にThings.GetThings()を呼び出すと、Thingオブジェクトのリストが返されます。そのコンベンションを破るには、膨大な時間のリファクタリングが必要になります。何かは、この問題に対する簡単な答えがあることを私に伝えます。しかし、これまであなたの助けに感謝します。 –