【发布时间】:2013-06-12 15:37:45
【问题描述】:
我正在通过 WCF 服务在另一台计算机上执行方法 这是我的代码的一个小例子:
对方法的调用:
return pipeProxy.SystemRequest(InstanceName, MethodName, Parameters);
这些是方法和接口:
[ServiceContract]
public interface IBlissRequest
{
[OperationContract]
object SystemRequest(string InstanceName, string MethodName, object[] Parameters);
}
public class BlissRequest : IBlissRequest
{
public object SystemRequest(string InstanceName, string MethodName, object[] Parameters)
{
return System21.BlissProcessingUnit.BPU.RequestFromIBC(InstanceName, MethodName, Parameters); ;
}
}
如您所见,我发送了 2 个字符串和一个对象数组,然后我返回了一个对象,此方法由不同的位置调用,并且对象可以不同,如果我通过此方法发送字符串或整数,一切正常很好,但是当我尝试发送列表时,事情变糟了,该方法无法执行。现在我阅读了使用DataContractSerializer 的标准,我需要将其转换为XmlSerializer 才能使其工作。我找到了http://msdn.microsoft.com/en-us/library/ms733901.aspx,但我的示例无法正常工作。有人能指点我一个好的方向吗?
这是抛出的异常:
尝试序列化参数http://tempuri.org/:Parameters 时出错。 InnerException 消息是 'Type 'System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]',数据合同名称为 'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays ' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关详细信息,请参阅 InnerException。
内部异常:
{"Type 'System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 数据合约名称为 'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays ' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。"}
需要发送的对象是:如果有可能的话,如果不是所有正常的 c# 东西,比如Lists
【问题讨论】:
-
你需要在客户端序列化你的列表,然后在服务器上反序列化它
-
@Jonesy 但在运行时我不知道正在发送或接收什么,所以我不知道它是列表还是字符串
-
对不起,我误会了
-
"...事情变糟了" - 您是否收到异常或错误消息?会发生什么 - 什么都没有?
-
@Tim 我已经用异常详细信息更新了我的帖子