首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Datacontracts属性getter运行两次

Datacontracts属性getter运行两次
EN

Stack Overflow用户
提问于 2010-04-20 15:04:47
回答 1查看 158关注 0票数 1

我有一组数据契约,它们充当我们希望公开的基类的包装器。一个简单的例子是:

代码语言:javascript
复制
[DataMember]
public List<decimal> Points
{
    get
    {
        return sourceObject.ListPoints();
    }

    private set{}
}

我们还有其他一些必须首先处理数据的属性(我们正在转换对象图,并且需要防止循环引用)。

我们看到的问题是,这个getter将触发两次,一次在服务操作中,然后在序列化期间再次触发。这造成了两个问题:

  1. 我们手动添加到集合中,因为它运行了两次,集合中填充了dupe。
  2. --如果在第二次运行期间抛出异常,则在操作的try/catch之外发生异常,并且不会引发错误。服务抛出一条神秘的超时消息,查看错误的唯一方法是通过WCF跟踪日志.

EN

回答 1

Stack Overflow用户

发布于 2010-04-20 15:12:49

您可以简单地“缓存”这些值。例如:

代码语言:javascript
复制
public class MyWrapper
{
     public MyWrapper(SourceObject sourceObject)
     {
         this.Points = sourceObject.ListPoints();
     }

     [DataMember]   
     public List<decimal> Points { get; private set; }
}

编辑:或者更懒惰:

代码语言:javascript
复制
public class MyWrapper
{
    public MyWrapper(SourceObject sourceObject)
    {             
    }

    private List<decimal> points;

    [DataMember]   
    public List<decimal> Points
    {
        get
        {
            if (this.points == null)
            {
                this.points = sourceObject.ListPoints();
            }

            return this.points;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2676197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档