c# - XML Serializer 不序列化具有公共(public) getter 但没有 se

我想知道我是否遗漏了什么……我的理解是我应该能够在反序列化后获得 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 属性一个自动的、私有(private)的 setter —— XML Serializer 会抛出一个合适的。我认为解决方法是 described here ,但它似乎不适用于非收藏品?我宁愿此时不必使用 DataContract 重写。

'CableSolve.Web.Api.WorkflowServicesProxy.TaskDto' does not contain a definition for 'ID' and no extension method 'ID' accepting a first argument of type 'CableSolve.Web.Api.WorkflowServicesProxy.TaskDto' could be found

最佳答案

反序列化器只是 C# 代码。它需要一个序列化属性的 setter 。因此,对于要由 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

关于c# - XML Serializer 不序列化具有公共(public) getter 但没有 setter 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396686/

相关文章:

quartz-scheduler - 使用简单的xml来驱动Quartz Scheduler

php - 在根域 (www) 上启动一个 php $_SESSION 并跨子域共享 session

c# - 哪个类需要实现 INotifyDataErrorInfo?

export-to-excel - SSIS导出到excel

cassandra - 如何将两个 Cassandra 集群合并为一个?

websphere - 如何在WAS集群前配置一个HTTP Server?

regex - 允许方括号的正则表达式

python - 使用 idapython 进行线程化

WIX - 添加自定义对话框后退/下一步按钮有问题

php - 使用ghostscript输出文件目录