将非DataContract类发送到Azure服务结构参与者

将非DataContract类发送到Azure服务结构参与者,azure,serialization,datacontractserializer,azure-service-fabric,Azure,Serialization,Datacontractserializer,Azure Service Fabric,对于用作Actor服务输入参数的所有类,服务结构需要[DataContract]和[DataMember]属性 是否有方法覆盖此默认值 在我们的项目中,我们大量使用只读消息类,这些类具有只读属性和构造函数。序列化是由Newtonsoft JSON序列化程序处理的,它非常有效。现在,我想在ServiceFabric中发送这些消息,因此我需要一种方法将默认的类似WCF的序列化重写为类似JSON的序列化程序。不幸的是,我认为目前不可能做到这一点。从文章中, 可靠的集合允许重写序列化程序,但 可靠的行动

对于用作Actor服务输入参数的所有类,服务结构需要
[DataContract]
[DataMember]
属性

是否有方法覆盖此默认值


在我们的项目中,我们大量使用只读消息类,这些类具有只读属性和构造函数。序列化是由Newtonsoft JSON序列化程序处理的,它非常有效。现在,我想在ServiceFabric中发送这些消息,因此我需要一种方法将默认的类似WCF的序列化重写为类似JSON的序列化程序。

不幸的是,我认为目前不可能做到这一点。从文章中,

可靠的集合允许重写序列化程序,但 可靠的行动者目前并不这样做。”


因此,映射到新类可能是值得的。

我能够通过自己实现序列化来解决问题。基本上,这就是它的工作原理:

  • 定义接受并返回
    byte[]
    +类型名称的参与者(+contract),例如

    Task<byte[]> DoWork(string typeName, byte[] message);
    
    taskdowork(字符串类型名,字节[]消息);
    
  • 通过使用自定义序列化程序(我使用Newtonsoft JSON转换器),将
    byte[]
    反序列化为指定类型的实例

  • 在发送端,使用相同的序列化程序将对象序列化为
    字节[]

  • 我定义了一些基类来包装它,所以我不必为每个参与者/客户机重复它

    这感觉有点不舒服。如果能从服务结构团队那里得到一些意见,那就太好了。从平台本身获得本机扩展点会更好
    DataContract
    感觉有点过时,它不再在我们的项目中的任何地方使用

    我的文章中详细介绍了这种方法