【问题标题】:Serialize a System.Type from WCF service and deserialize from Silverlight client?从 WCF 服务序列化 System.Type 并从 Silverlight 客户端反序列化?
【发布时间】:2011-04-25 03:01:13
【问题描述】:

我正在尝试完成将 System.Type 实例从 WCF REST JSON 服务发送到 Silverlight 客户端的任务。尽管System.Type 被标记为可序列化,但如果我尝试让我的 OperationContract 方法实现返回 System.Type,我的 WCF 服务会以服务器错误进行响应。例如,

[OperationContract]
        [WebInvoke(Method = "GET",
                    ResponseFormat = WebMessageFormat.Json,
                    UriTemplate = "type")]
        public Type getType()
        {
            return typeof(string);
            //request error: The server encountered an error processing the request. See server logs for more details.
        }

我还没有获得 System.Type 的序列化以与 System.Web.Script.Serialization.JavaScriptSerializer 或 DataContractSerializer 一起使用。我只得到序列化以使用BinaryFormatter。问题是,Silverlight 4 没有 BinaryFormatter。我找到了this Silverlight 二进制序列化库,它看起来很有前途,但没有成功序列化 System.Type。

是否有人对如何从 WCF 服务序列化 System.Type 然后从 Silverlight 反序列化它有任何想法?一个工作解决方案的代码 sn-p 示例将很有帮助并受到赞赏。

【问题讨论】:

    标签: c# wcf silverlight-4.0


    【解决方案1】:

    Type 不能以所描述的方式使用(请注意[Serializable] 仅适用于BinaryFormatter)。最好的办法是传输 AssemblyQualifiedName 并在每一端加载,但请注意,您需要在每一端声明程序集才能使其工作。

    最终,在平台之间发送Type 的目标并没有多大意义,我很害怕。如果您可以更具体地说明您想要完成什么,也许我们可以提出一个更好的计划?

    【讨论】:

    • System.DynamicObject 似乎不适用于 Silverlight 中的数据绑定,但在运行时使用 System.Reflection.Emit 生成的类型可以工作。
    • @TWebster 这不起作用;一个好主意,但行不通。不过,您可以生成一个程序集并发送字节内容
    • @Marc 为什么这不起作用?为什么可以将 System.Assembly 序列化为字节、发送和反序列化,而不是 System.Type?
    • @TWebster - 因为您不能以您尝试的方式序列化Type(因此问题),但可以将程序集保存为字节流(假设您启用了这个在您的 AssemblyBuilder 或 ModuleBuilder 中,无论是哪个)。
    • 你不能序列化一个类型,但它可能会序列化一个程序集,然后提取类型吗?
    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2020-03-16
    相关资源
    最近更新 更多