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 属性一个自动的、私有的 setter —— XML Serializer 会很合适。我认为这里描述了解决方法,但它似乎不适用于非收藏品?我宁愿此时不必使用 DataContract 重写。

“CableSolve.Web.Api.WorkflowServicesProxy.TaskDto”不包含“ID”的定义,并且找不到接受“CableSolve.Web.Api.WorkflowServicesProxy.TaskDto”类型的第一个参数的扩展方法“ID”

4

1 回答 1

3

反序列化器只是 C# 代码。它需要一个序列化属性的设置器。因此,对于要由 XML 序列化程序序列化的每个属性,您必须有一个 getter 和 setter;它还要求财产是公开的。

此外,您不需要该类的空构造函数。

[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 回答