私は 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 group
System.Type
Protobuf.Serializer
protobuf-net.dll のクラスです。このクラスでは、Serialize<T>(System.IO.Stream)
とDeserialize<T>(System.IO.Stream)
は、結果をシリアライズおよびデシリアライズする 2 つのメソッドです。
これがどのように可能かわかりません!説明してもらえますか?