0

全て、

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 メソッドが正常に機能することです。

4

1 に答える 1

0

あなたの質問と非常によく似た質問がすでに尋ねられているようです: Link

このリンクに従って、DataContractSerializer を使用するか、ゲッター (およびセッター) を明示的に実装してみてください。

于 2012-08-14T21:58:16.943 に答える