全て、
Web メソッドから返された ProjectBudget クラスのインスタンスがあります。
元:
[WebMethod()]
public ProjectBudget LoadBudget(int id)
{
ProjectBudget budget = BudgetManager.LoadBudget(id);
return budget;
}
ProjectBudget クラスには、次の定義が含まれています。
public class ProjectBudget
{
public int Id = -1;
public long VersionNumber = -1;
public string QuoteNumber = "";
public string CurrencyCode = "";
public ProjectInfo Project;
public ClientInfo Client;
public readonly List<InventoryItem> Inventory = new List<InventoryItem>();
public readonly List<Staff> Staff = new List<Staff>();
public readonly List<CodeType> Departments = new List<CodeType>();
public readonly SerializableDictionary<string, string> Tasks = new SerializableDictionary<string, string>();
public ProjectBudget()
{
}
}
表示されるすべてのパブリック フィールドは、XML シリアライザーによって完全に無視される Tasks フィールドを除いて、正常にシリアル化されます。ディクショナリは XML シリアライザーで処理できないことがわかっているので、ここではシリアライズ可能なディクショナリ (IXmlSerializable を実装した単なるディクショナリ) を使用しますが、XML シリアライザーはそれを完全に無視することを決定します。つまり、XML 出力にはタスクが含まれておらず、生成されたプロキシ クラスにはこのフィールドがありません。
このフィールドを省略しないように XML シリアライザーに指示する方法を理解する必要があります。
ところで、興味深いのは、SerializableDictionary を返す Web メソッドが正常に機能することです。