2

ここで何かが足りないのではないかと思います...私の理解では、逆シリアル化した後、IDプロパティを取得できるはずです(ただし、設定はできません)。現状では、IDプロパティはまったく持ち込まれていません。

namespace CableSolve.Orders.Core.Dto
{
    [Serializable]
    [XmlRoot("Task"), SoapType("Task")]
    public class TaskDto : IDto
    {
        // ReSharper disable ConvertToAutoPropertyWithPrivateSetter
        private int _id;
        public int ID { get { return _id; } }
        // ReSharper restore ConvertToAutoPropertyWithPrivateSetter
        public int TaskSequence { get; set; }

        public TaskDto()
        {
        }
    }
}

理想的には私のIDは設定できません。IDプロパティに自動のプライベートセッターを指定すると、XMLシリアライザーが適合をスローします。その回避策はここで説明されていると思いましたが、コレクション以外では機能しないようです。この時点では、DataContractを使用して書き直す必要はありません。

「CableSolve.Web.Api.WorkflowServicesProxy.TaskDto」には「ID」の定義が含まれておらず、「CableSolve.Web.Api.WorkflowServicesProxy.TaskDto」タイプの最初の引数を受け入れる拡張メソッド「ID」が見つかりませんでした

4

1 に答える 1

3

デシリアライザーは単なるC#コードです。シリアル化されたプロパティにはセッターが必要です。したがって、XMLシリアライザーによってシリアル化されるすべてのプロパティに対してゲッターとセッターが必要です。また、プロパティが公開されている必要があります。

また、クラスに空のコンストラクターは必要ありません。

[Serializable]
[XmlRoot("Task"), SoapType("Task")]
public class TaskDto : IDto
{
    public int ID { get; set; }
    public int TaskSequence { get; set; }
}

詳細については、http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspxを参照してください。

于 2012-09-13T00:07:20.667 に答える