Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 如何序列化IList<;T>;?_C#_.net_Web Services_.net 3.5_Ibatis.net - Fatal编程技术网

C# 如何序列化IList<;T>;?

C# 如何序列化IList<;T>;?,c#,.net,web-services,.net-3.5,ibatis.net,C#,.net,Web Services,.net 3.5,Ibatis.net,我有一个OR映射器(iBatis.Net),它返回一个IList // IList<T> QueryForList<T>(string statementName, object parameterObject); var data = mapper.QueryForList<Something>(statement, parameters); //IList QueryForList(string语句名,对象参数object); var data=mapp

我有一个OR映射器(iBatis.Net),它返回一个IList

// IList<T> QueryForList<T>(string statementName, object parameterObject);
var data = mapper.QueryForList<Something>(statement, parameters);
//IList QueryForList(string语句名,对象参数object);
var data=mapper.QueryForList(语句、参数);
我试图在Web服务中使用它,并希望返回1:1的数据。当然,我不能在WebMethod中返回IList,因为它是一个接口,因此不可序列化

我发现映射程序确实返回了一个列表。但是我害怕把它放到列表中,因为当然mappers的内部工作在未来的版本中可能会发生变化(而且感觉很脏)

我也应该

a) return new List<Something>(data);

b) return (List<Something>)data;

c) // your solution here
a)返回新列表(数据);
b) 返回(列表)数据;
c) //您的解决方案在这里
非常感谢

我认为你不需要c)。 使用解决方案a)应该是非常安全的

此解决方案依赖于IBatis.net的公共api。好的api不会改变它们的公共api,除非它真的是解决关键任务问题的唯一方法


希望这能有所帮助。

为什么要序列化IList:)只需将其用作您自己的集合的源代码,然后将其序列化:

var data = mapper.QueryForList<T>(statement, parameters);
var yourList = new List<T>(data);
//Serialize yourList here ))
var data=mapper.QueryForList(语句、参数);
var yourList=新列表(数据);
//在此处序列化您的列表)

如果它确实是一个
列表
,但您希望防止更改并使其仍然有效,那么最有效的解决方案将是尝试将其转换为列表,如果失败,则从其内容创建一个新列表,例如

var data = mapper.QueryForList<T>(statement, parameters);
var list = data as List<T> ?? new List<T>(data);
var data=mapper.QueryForList(语句、参数);
变量列表=数据作为列表??新名单(数据);

但是,您提到不能返回接口,因为它是web服务。ASMX和
XmlSerializer
类可能是这样的,但是如果您使用WCF构建web服务并使用
DataContractSerializer
,那么它将愉快地序列化收集接口(作为服务的输入和输出)。这种类型的改变可能比你想要的要大一些

返回的IList是列表这一事实不属于公共API的一部分;这是使用接口的要点,不是我说的。返回ilist是公共apinorbertB的一部分,是的,解决方案a)是安全的,但是如果ilist包含许多元素,那么它的速度会很慢,而且。。。b) 谁是最快的,但不安全,因此我的问题是一个解决方案c)。。那是库尔。我不知道你能和WCF合作。加油!非常感谢。对于这个项目,我将不会切换到WCF,但它的好知道,以供将来参考。我也刚刚认识到:我真的很爱这个??语法;-)因为如果IList已经是一个列表,那么使用它比将项目注入新列表更快。