当我调用我的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 []))]但没有运气
答案 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)
在客户端上配置服务引用提供了“数据类型”选项,允许您为“收集/字典类型”指定不同的类型。你有什么设置?