我正在玩 C# protobuf 实现,我可能遇到了问题。我想动态反序列化结果。
public byte[] ManageRequest(string argument1, params FunctionalParameter[] argument2)
{
var serverBase = new ServerBase();
if (argument1 != null)
{
MethodInfo type = serverBase.GetType().GetMethod(argument1);
ParameterInfo[] parameters = type.GetParameters();
if (parameters.Length.Equals(argument2.Length))
{
var pars = new object[argument2.Length];
for (int i = 0; i < parameters.Length; i++)
{
if (parameters[i].Name == argument2[i].ParameterNameField)
{
using (Stream result = new MemoryStream(argument2[i].ParameterValueField))
{
pars[i] = Serializer.Deserialize<int>(result); // I want to deserialize the //result dynamically( not want to use int, we can pass result dynamically)
}
}
}
if (pars.Length.Equals(argument2.Length))
{
return type.Invoke(serverBase, pars).ToProtoBuf();
}
}
}
return null;
}
该方法有两个参数: 1. argument1
- MethodName 2. argument2
- s 数组FunctionalParameter
(在这个类中,我们有两个成员:
string ParameterNameField
和byte[] ParameterValueField
。)
我想动态反序列化结果,例如Serializer.Deserialize<int>(result);
我已经将 int 传递给序列化,在这种情况下,我知道我们需要反序列化 int 类型的结果,但我想动态反序列化我已经序列化的结果。
使用parameters[i].ParameterType.Name
代码我得到了类名(例如System.Int32
,等等)和用户定义的数据类型,比如Class1
,Class2
等等。如果我Serializer.Deserialize <parameters[i].GetType()> (result)
在这种情况下通过,我得到以下错误:
不能应用于“ ”和“ ”
operator '<'
类型的操作数method group
System.Type
Protobuf.Serializer
是 protobuf-net.dll 中的一个类。在这个类中,Serialize<T>(System.IO.Stream)
和Deserialize<T>(System.IO.Stream)
是序列化和反序列化结果的两种方法。
我不明白这怎么可能!你能给我解释一下吗?