我正在使用Silverlight RIA Services开发解决方案。其中一个要求是向客户端发送“推送”通知,我正在使用对服务器的阻塞调用来实现,并在收到更新时返回。尝试使用通用结构实现这一点,我来到这个数据结构:
public class Change
{
public ObjectType Type { get; internal set; } // objecttype is an enum
public int ObjectKey { get; internal set; }
public string PropertyName { get; internal set; }
public object OldValue { get; internal set; }
public object NewValue { get; internal set; }
//key required for RIA Services
[Key]
public Guid ChangeGuid { get; private set; }
}
除了此设计中的一些明显缺陷(这只是一个测试)之外,由于对象的类型,属性OldValue
和NewValue
在客户端上不可见。这些属性的值始终为Entity Framework primitive。
有没有办法在不将所有内容转换为字符串的情况下将OldValue
和NewValue
提供给客户端?
object
关键字使搜索结果混乱,谷歌搜索并没有让我走得太远。
对我的问题的任何一般解决方案表示赞赏。
答案 0 :(得分:0)
如果您将WCF序列化为“对象”,则无法隐式地在客户端重新引入其他接口/类型。无论如何,你有效地将它们串行化为字符串。
关于什么类型的对象“它确实是”的内部细节不会在序列化中保留。
每个ObjectType枚举值一个可空成员怎么样,只设置你需要的那个?这可能会为传输的数据增加一些开销,但可能更易于管理,并且会为您提供强类型对象。