2

我正在将我的一些类转换为使用 DataContractSerialization,以便可以在输出中包含 Linq 实体。在这个过程中,一个理论问题突然出现在我的脑海中,当我打赌答案是“不”时,我想我还是会提出这个问题。

有没有办法有条件地序列化一个对象?例如,如果我为了向客户发送信息而序列化一个 Employee 对象,我可能不想包含地址。另一方面,如果我将其序列化以在管理该员工的网站的 Web 服务中使用,我可能需要该信息。

另一种可能性是根据它们是否是被序列化的基础对象来序列化某些成员。因此,如果我有一个包含 Location 的 Ticket 类,并且 Location 包含一个联系人列表,如果我正在序列化 Ticket,我可能不想要那个联系人列表。但是,如果我尝试使用 Location 本身,那么拥有它可能会很好。

那么对此有什么想法吗?

4

2 回答 2

0

我还没有使用过 WCF,但我知道使用 .Net 中的标准序列化(基于属性),我可以在一个类上有一个 OnSerializing 和一个 OnDeserialized 方法;也许 WCF 提供了类似的东西?在这些方法中,您可以有条件地删除数据(尽管请记住,这意味着您的对象已更改,这是序列化的一个非常讨厌的副作用)。

例子:

public class Employee
{
    public Address HomeAddress { get; set; }

    [OnSerializing]
    private void RemoveAddress(StreamingContext context)
    {
        if (1 == 1) // replace with your condition
            HomeAddress = null;
    }

    [OnDeserialized]
    private void PutAddressBack(StreamingContext context)
    {
        if (1 == 1)
            HomeAddress = LoadHomeAddressFromBackingStore();
    }
}
于 2009-04-06T17:36:07.237 回答
0

I recommend against directly returning LINQ to SQL or ADO.NET Entity Framework objects from a web service. Unfortunately, this serializes implementation-specifics. For instance, base class fields are also serialized, as are back links.

于 2009-04-07T00:29:53.543 回答