ria +prism 难解问题之 "返回类型必须是实体或复杂类型、复杂类型的集合或预定义的可序列化类型之一"

最近在做ria+siverlight 的项目,遇到了很多无解的问题。实在头疼不已,思量再三还是改一下懒惰的习性,写篇文章记录一下。如果有哪位世外高人能路过此地,指点一二,就更感激不尽了。。闲话少说,上问题。。

问题描述:在服务端自定义了一个与数据无关联的实体类,并通过方法进行这个实体类的返回。编译Service.Web端没有问题,但是在编译Service时出问题了。。报错大致如下:'返回类型必须是实体或复杂类型、复杂类型的集合或预定义的可序列化类型之一',网上找了头天,但是实在找不出解决的办法。最后稀里糊涂的碰对了,但还是没弄明白。。

实体类的代码:

    [MetadataTypeAttribute(typeof(Unit.UnitMetadata))]
    [DataContractAttribute(IsReference=true)]
    [Serializable]
    public partial class Unit
    {
         /// <summary>
        /// 主键
         /// </summary>
        [Key] 
         [DataMember]
        public string ID { get; set; }
          [DataMember]
        public string Member1 { get; set; } 
         internal sealed class UnitMetadata
         {
             private UnitMetadata()
             {
             }            
             public string ID { get; set; }            
             public string Member1 { get; set; }      
         }
    } 

代码:

     public partial class DomainSvcViolation 
    {
        //[Invoke]
        //public Unit QueryUnitInfo(string ID,string Member1)
        //{ 
         //   return new Unit()
           // {
             //    ID="123",
		// Member1="test",
            //};
            //return this.GetVehInfo(plate_nbr, plate_type);
        //} 
        [Invoke]
        public Unit Test()
        {
            return new Unit() { ID = "123" };
        } 
    }

加DataMember的时侯报错,‘‘被标记为属性,但该属性不可序列化。是否缺少DataMemberAttribute?’’后来加了DataMember属性以后就可以编译通过了。

但是当我再添加这个QueryUnitInfo的时侯,又报那个可恶的错误了。如下:

    public partial class DomainSvcViolation 
    {
        [Invoke]
        public Unit QueryUnitInfo(object[] paras)
        { 
            return new Unit()
            {
                 ID="123",
		Member1="test",
           };
            return this.GetVehInfo(plate_nbr, plate_type);
        } 
        [Invoke]
        public Unit Test()
        {
            return new Unit() { ID = "123" };
        } 
    }

方式使用会报错,'返回类型必须是实体或复杂类型、复杂类型的集合或预定义的可序列化类型之一'.

再改一下,可以了。。。。代码如下:

    public partial class DomainSvcViolation 
    {
        [Invoke]
        public Unit QueryUnitInfo(string Id)
        { 
            return new Unit()
            {
                 ID="123",
		Member1="test",
           };
            return this.GetVehInfo(plate_nbr, plate_type);
        } 
        [Invoke]
        public Unit Test()
        {
            return new Unit() { ID = "123" };
        } 
    }

你们看出来差别了吗?。。。。

补充:

public int SetOprtInRole(List<T_ASSO_ROLE_OPER> lstOprt, int roleId);如此方法签名会报同样的错误。

public int SetOprtInRole(List<string> lstOprt, int roleId);如此则可以了。

备注:这个签名在有的同事机器上是可以编译通过的。另,T_ASSO_ROLE_OPER是服务端的类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值