Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WCF中序列化对象类型?_C#_Wcf_Serialization - Fatal编程技术网

C# 如何在WCF中序列化对象类型?

C# 如何在WCF中序列化对象类型?,c#,wcf,serialization,C#,Wcf,Serialization,我有一个Dto模型类: [System.Runtime.Serialization.DataContract, System.Serializable] public class DataObj { [System.Runtime.Serialization.DataMember] public object Value { get; set; } public static DataObj CreateDataObj(object obj) {

我有一个Dto模型类:

[System.Runtime.Serialization.DataContract, System.Serializable]
public class DataObj
{
    [System.Runtime.Serialization.DataMember]
    public object Value { get; set; }

    public static DataObj CreateDataObj(object obj)
    {
        return new DataObj { Value = obj };
    }
}

static void main()
{
      var obj1 = DataObj.CreateDataObj(10);
      wcfService.Send(obj1);
      var obj2 = DataObj.CreateDataObj("hello");
      wcfService.Send(obj2);
      var obj3 = DataObj.CreateDataObj(new int[]{10, 20,30});
      wcfService.Send(obj3);
      var obj4 = DataObj.CreateDataObj(new string[]{"ht", "fd","xs"});
      wcfService.Send(obj4);
 }
main
方法中,对obj 1和2的WCF调用正常,但对obj 3和4的WCF调用不正常,并引发序列化异常


如何在服务调用中传输obj 3和4?

在WCF通信中,必须明确指定序列化的类型。这确保了客户端和服务器在通信期间都能识别自定义类型。将数据成员标记为对象违反了WCF设计模式。根据您的场景,可以使用Datatable类型,但不推荐使用此类型。

建议您在设计数据协定时指定需要序列化的数据类型。例如,我们可以考虑使用列表[t]。
如果有什么我可以帮忙的,请随时告诉我。

顺便说一句,创建这样一个允许传递任何旧对象的契约是一种反模式。您永远不知道允许发送什么,服务也永远无法预测它将收到什么。最终的结果是,您不知道该服务可以执行什么操作,该代码现在已在应用程序中实现和使用,无法重新实现,有没有解决此问题的方法?@MickyD
[Serializable]
[DataMember]
不属于同一类。两个不同的序列化程序。“现在在应用程序中使用,不可能重新实现”-考虑到您将遇到
序列化异常
始终是“重新实现”的时候了