【问题标题】:Serialization in WCF/LINQ to SQLWCF/LINQ to SQL 中的序列化
【发布时间】:2009-06-02 17:35:51
【问题描述】:

我用我需要的表创建了我的 dbml 文件。生成的方法之一就是这样,名称已更改且语法不正确。但是我的代码使用创建的原始方法编译。

[Association(Name="Clients_ToEmployee", Storage="_ToEmployees", ThisKey="ClientID", OtherKey="ClientID")]
[DataMember(Order=70, EmitDefaultValue=false)]
public EntitySet<ClientToEmployee> ClientToEmployees
{
    get
    {
        if ((this.serializing &&(this._ToEmployees.HasLoadedOrAssignedValues == false)))
        {
            return null;
        }
        return this._ToEmployees;
    }
    set
    {
        this._ToEmployees.Assign(value);
    }
}

当我尝试使用序列化我的结果集时

 DataContractSerializer ser =
                new DataContractSerializer(clientObj.GetType());
var memStream = new System.IO.MemoryStream();
ser.WriteObject(memStream ,clientObj);
memStream .Seek(0, System.IO.SeekOrigin.Begin);
var streamReader = new System.IO.StreamReader(memStream );
var xml = streamReader.ReadToEnd();

看起来像这段代码,见下文,它总是返回null

if ((this.serializing && (this._ToEmployees.HasLoadedOrAssignedValues == false)))

如果我设置断点并单步执行代码,那么上面的语句

this._ToEmployees.HasLoadedOrAssignedValues

是真的,我得到我的对象而不是返回一个空值。

为什么在我单步执行代码时它的行为正确?我应该引入延迟以便填充 Entityset 对象吗?

【问题讨论】:

    标签: c# linq wcf serialization


    【解决方案1】:

    我在 WCF 服务中遇到了同样的问题。在我的情况下,在调试时,Linq 有足够的时间延迟加载子记录。当不处于调试模式时,它只是返回父记录。我的大多数方法都很好,但是一个有很多父记录和很多子记录,没有一个子记录成功。所以我把这段代码放在我的 WCF 方法中:

    DataLoadOptions dlOptions = new DataLoadOptions();
    dlOptions.LoadWith<ParentTable>(Parent => Parent.Child);
    dc.LoadOptions = dlOptions;
    

    【讨论】:

      【解决方案2】:

      您必须包含更多代码才能让我们确定,但请考虑它告诉您真相的可能性。也许没有。出于某种原因,您可能正在单步执行与在调试器外部执行的代码路径不同的代码路径。我们无法判断,因为您没有发布代码。

      我建议您简化场景并重试。

      我还建议不要从 Web 服务返回 LINQ to SQL 或 LINQ to Entities 对象。不幸的是,Microsoft 选择在基类中包含依赖于实现的数据,因此它们不能干净地序列化。

      【讨论】:

        【解决方案3】:
        DataLoadOptions dlOptions = new DataLoadOptions();
        dlOptions.LoadWith<ParentTable>(Parent => Parent.Child);
        dc.LoadOptions = dlOptions;
        

        有效。

        我真的花了很多时间来寻找解决方案......!!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-31
          • 1970-01-01
          • 2012-09-03
          • 2011-02-24
          相关资源
          最近更新 更多