获取扩展的LINQ类属性以进行序列化

时间:2010-08-05 19:06:23

标签: c# linq-to-sql serialization

我有一个LINQ to SQL类(dbml)代表数据库中的一些表。我通过使用新属性(DwellingCode)扩展其中一个表(Dwelling)的部分类来添加一个“计算字段”。此属性获取Dwelling表中的多个数据库字段的值,并生成一个字符串。

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

要使DwellingCode属性与其他数据库字段序列化,我需要做什么?基于一些谷歌搜索,我尝试将[DataMember]和[DataMamberAttribute]添加到DwellingCode属性,将[DataContract]和[Serializable]添加到部分类,但似乎没有任何效果。

public partial class Dwelling
{

    public string DwellingCode
    {

        get
        {
            // code to concatenate fields here
        }

    }

}

2 个答案:

答案 0 :(得分:0)

好的,将此添加到DwellingCode属性中:

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

出于某种原因,这些不起作用。我不确定为什么在我“使用”它时删除完整的命名空间路径不起作用,我读过的文档说如果未指定name参数,该名称将与属性名称相同所以我不知道为什么它如此挑剔。

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

编辑:

我还需要添加一个空白的setter,否则该属性不会显示。不管。

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

    set
    {

    }

    get
    {
        // code goes here
    }

}

}

答案 1 :(得分:-1)

您的属性是只读的,这就是它没有被序列化的原因。标准内置序列化仅序列化读写属性(如您所见)。