REFLECTION使用List <class>参数</class>调用方法

时间:2015-02-20 09:31:48

标签: c# .net

我有这个场景:

我想调用一个acepts List参数的方法。

参数:列表 当我执行这一行:

MethodInfo methodInfo = type.GetMethod(nameMethod);
object classInstance = Activator.CreateInstance(type, null);
object[] parametersArray = new object[] { Parameter == null ? Activator.CreateInstance(tipoEntidad, null) : Parameter };

objeto = methodInfo.Invoke(classInstance, parametersArray);

抛出此错误:

  

innerException:{“Elformateadorinicióunaexterpciónalintentar   deserializar el mensaje:error al intentar deserializarelparámetro   链接:tempuri.org:lpdv。 El mensaje de InnerException era'错误en la   línea1,posición342。El elemento   'http://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType'   coniene datos de un tipo que重合con nombre   'http://schemas.datacontract.org/2004/07/Entitys:Pdv'。萨尔瓦多   deserializador no tiene conocimientodeningúntipoqueestéasignado   一个este nombre。通过使用DataContractResolver o agregar el tipo   对应一个'PuntoVenta'和la lista de tipos conocidos(por   ejemplo,usando el atributo KnownTypeAttributeoagregándoloala   lista de tipos conocidos que se pasa a DataContractSerializer)。'。   咨询InnerException paraobtenermásinformación。“}

只有在参数为List时才会发生这种情况,如果参数的Pdv工作正常,¿我能做什么?

1 个答案:

答案 0 :(得分:1)

这对我有用

        [Test]
        public void T1()
        {

            var type = typeof (classwithListmethod);

            MethodInfo methodInfo = type.GetMethod("List");
            object classInstance = Activator.CreateInstance(type, null);

            var list = new List<string>(){"one","two"};
            var a = methodInfo.Invoke(classInstance, new []{list});
        }


        public class classwithListmethod
        {
            public void List(List<string> s)
            {
                foreach (var ss in s)
                {
                    Console.WriteLine(ss);
                }
            }

        }