服务器端属性在Silverlight客户端不可用

本文关键字:客户端 Silverlight 属性 服务器端 | 更新日期: 2023-09-27 18:01:37

我有一个自定义属性:

[System.AttributeUsage(System.AttributeTargets.Property)]
public class MyCustomAttribute : System.Attribute
{
}

它是在一个名为MyCustomAttribute.shared.cs的文件中声明的,它使类在客户端上出现在自动完成/智能感知中时在客户端可见。

我已经将它添加到我的类上的属性,这是一个从数据库返回的Entity,并通过WCF riasservices传递给Silverlight客户端:

public partial class MyClass
{
    [Required(AllowEmptyStrings=true)]
    [Display(ResourceType=typeof(ResourceFile), Name="ResourceName")]
    [MyCustom]
    public string MyProperty { get; set; }
}

但是,当我尝试查看属性是否有附加属性时,它不存在于列表中:

PropertyInfo prop = GetProperty(myType, "MyProperty");
object[] attributes = prop.GetCustomAttributes(false);
foreach (object attribute in attributes)
{
    if (attribute is MyCustomAttribute)
    {
        // Do my stuff here
    }
}

返回的属性都不是MyCustomAttribute

我已经检查了客户端生成的代码,对于这个属性,它看起来像这样:

    /// <summary>
    /// Gets or sets the 'BarcodeNumber' value.
    /// </summary>
    [ConcurrencyCheck()]
    [DataMember()]
    [Display(Name="ResourceName", ResourceType=typeof(ResourceFile))]
    [Required(AllowEmptyStrings=true)]
    [RoundtripOriginal()]
    public string MyProperty
    {
        ....
    }

所以,显然我的属性没有被复制到客户端。

我错过了什么?

服务器端属性在Silverlight客户端不可用

我缺少的是我需要编写一个自定义代码生成器来扩展默认代码生成器,以便它可以识别我的新属性。

该过程在web上的各个地方都有文档:

。. NET - WCF RIA服务代码生成器naar je hand zetten(本文为英文)

WCF RIA服务的T4代码生成器

但是,我们认为在一个属性上仅为一个属性实现这将是过度的,因此我们使用了一种不同的方法(基于业务逻辑)来实现我们需要的功能。