私は 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;
}
このメソッドは 2 つの引数を取ります: 1. argument1- MethodName 2. argument2- s の配列FunctionalParameter(このクラスには 2 つのメンバーがあります:
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 groupSystem.Type
Protobuf.Serializerprotobuf-net.dll のクラスです。このクラスでは、Serialize<T>(System.IO.Stream)とDeserialize<T>(System.IO.Stream)は、結果をシリアライズおよびデシリアライズする 2 つのメソッドです。
これがどのように可能かわかりません!説明してもらえますか?