代码之家  ›  专栏  ›  技术社区  ›  Paul Abbott

正在获取要序列化的扩展Linq类属性

  •  2
  • Paul Abbott  · 技术社区  · 15 年前

    我有一个linq-to-sql类(dbml),表示数据库中的一些表。我添加了一个“计算字段”,通过用一个新属性(住宅代码)扩展其中一个表(住宅)的部分类来排序;这个属性获取住宅表中几个数据库字段的值并生成一个字符串。

    到目前为止,一切都正常;我可以让这个计算字段在网页等绑定控件中正确显示。问题是我还有一个SOAP Web服务,它返回一个驻留对象。当住宅对象被序列化为XML时,住宅代码不包含在其余的“真实”数据库字段中。

    我需要做什么才能使住宅代码属性与数据库字段的其余部分进行序列化?基于一些谷歌搜索,我尝试将[datamember]和[datamamberattribute]添加到住宅代码属性,并将[datacontract]和[serializable]添加到分部类,但似乎没有任何效果。

    public partial class Dwelling
    {
    
        public string DwellingCode
        {
    
            get
            {
                // code to concatenate fields here
            }
    
        }
    
    }
    
    2 回复  |  直到 15 年前
        1
  •  -1
  •   Quango    15 年前

    您的属性是只读的,这就是它没有被序列化的原因。标准的内置序列化只序列化读写属性(正如您发现的那样)。

        2
  •  0
  •   Paul Abbott    15 年前

    好的,将此添加到住宅代码属性中可以工作:

    [global::System.Runtime.Serialization.DataMemberAttribute(Name = "DwellingCode")]
    

    由于某种原因,这些都不起作用。我不知道为什么当我“使用”完整的名称空间路径时删除它不起作用,而且我读到的文档说如果没有指定名称参数,名称将与属性名称相同,所以我不知道为什么它如此挑剔。

    using System.Runtime.Serialization;
    ...
    [DataMemberAttribute(Name = "DwellingCode")]
    [DataMemberAttribute()]
    

    编辑:

    我还需要添加一个空白setter,否则属性将不会显示。无论什么。

    [global::System.Runtime.Serialization.DataMemberAttribute(Name = "DwellingCode")] 
    public string DwellingCode
    {
    
        set
        {
    
        }
    
        get
        {
            // code goes here
        }
    
    }
    

    }