带有“ArrayOfstring”数据协定的WCF序列化错误

时间:2009-03-30 01:21:45

标签: wcf serialization

当我调用我的WCF服务时收到下面提到的错误?我该如何摆脱它?

尝试序列化参数http://tempuri.org/:MyWCFSvc.svc时出错 InnerException消息是'Type'System.String []',数据协定名称为'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。有关更多详细信息,请参阅InnerException。*

我尝试在我的WCF服务界面中使用[ServiceKnownType(typeof(string []))]但没有运气

4 个答案:

答案 0 :(得分:2)

迟了一年,但我遇到了同样的问题,这就是你需要做的事情

List<SomeClass> mylist = new List<SomeClass>();

DataContractSerializer dcs = new DataContractSerializer(mylist.GetType());
XmlWriter writer = XmlWriter.Create(sb, XWS);
dcs.WriteObject(writer, query);      
writer.Close();

问题是,当您使用类的类型构造序列化程序时,序列化程序不会将其视为一个arrray,它只能看到一个对象。

首先通过这样做找到它:

DataContractSerializer dcs = new DataContractSerializer(SomeClass.GetType());
XmlWriter writer = XmlWriter.Create(sb, XWS);
dcs.WriteObject(writer, query[0]);  // Only get the first record from linq to sql
writer.Close();

答案 1 :(得分:1)

我也遇到了同样的问题,但在使用[ServiceKnownType(typeof(string[]))][ServiceKnownType(typeof(int[]))]对OperationContract进行了限定后,问题就解决了。

例如:

[ServiceContract]
    public interface IReportService
    {
        [OperationContract]
        [ServiceKnownType(typeof(string[]))]
        [ServiceKnownType(typeof(int[]))]
        bool GenerateReport(int clientId, int masterId, string reportType, int[] vtIds, DateTime initialDate, DateTime finalDate,
                            bool descending, string userName, string timeZoneId, bool embedMap,
                            object[] vtExtraParameters, object[] vtScheduleParameters, string selectedCriteria,
                            out long reportID, out int scheduleID, out string message);

答案 2 :(得分:0)

你没有理由让KnownType成为一个字符串数组。序列化程序应该已经知道了,并且数组不是问题。我在WCF中移动列表没有问题。你能发表你正在做的代表性样本吗?

答案 3 :(得分:0)

在客户端上配置服务引用提供了“数据类型”选项,允许您为“收集/字典类型”指定不同的类型。你有什么设置?