Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
.net ProtoBuf型铸造问题_.net_Protocol Buffers_Protobuf Net - Fatal编程技术网

.net ProtoBuf型铸造问题

.net ProtoBuf型铸造问题,.net,protocol-buffers,protobuf-net,.net,Protocol Buffers,Protobuf Net,我使用ProtoBuf来序列化类。不幸的是,Serializer.Deserialize方法给出错误“类型不是预期的,并且无法推断任何约定:System.Object”。任何提示如何解决这个问题 private void WriteToFile( string siteID, object objectTemp, stringfileSystemPath) { var type = objectTemp.GetType(); using (var file

我使用ProtoBuf来序列化类。不幸的是,Serializer.Deserialize方法给出错误“类型不是预期的,并且无法推断任何约定:System.Object”。任何提示如何解决这个问题

private void WriteToFile( string siteID, object objectTemp, stringfileSystemPath)
        {
            var type = objectTemp.GetType();
using (var file = File.Create(fileSystemPath))
                {
                    Serializer.NonGeneric.Serialize(file, objectTemp);
                }
        }

private object ReadFromFile( string siteID, object objectTemp, stringfileSystemPath)
        {
            Type type = objectTemp.GetType();   
            object objectTemp2=null;
                using (var file = File.OpenRead(fileSystemPath))
                {
                    objectTemp2 = Serializer.NonGeneric.Deserialize(type, file);
                }
                return objectTemp2;
            }
        }

我正在将protobuf.Net v2 beta与.Net 3.5一起使用。非通用。反序列化希望提供protobuf生成的类型。(您给它的类型是
System.Object
。它不知道该怎么办)

查看protoc生成的C#代码,并指定要从文件中读取的类的
typeof()


或者换句话说,如果
WriteToFile
成功,则使用objectTemp类型。进入文件的类型是需要从文件中出来的类型。

Serializer.NonGeneric.Deserialize
希望提供protobuf生成的类型。(您给它的类型是
System.Object
。它不知道该怎么办)

查看protoc生成的C#代码,并指定要从文件中读取的类的
typeof()


或者换句话说,如果
WriteToFile
成功,则使用objectTemp类型。进入文件的类型是需要从文件中出来的类型。

谢谢SethCall。我不确定我是否理解这句话“查看protoc生成的C#代码,并指定您试图从文件中读取的类的typeof()。我不想在“WriteToFile”方法中将“object”参数更改为“actual type”,因为我必须为不同的类型创建多个方法。有什么建议吗?这么说吧;您的签名应该是:private object ReadFromFile(string siteID,Type objectType,string filesystem),其中类型应该是最初进入文件的对象的同一类型。您的回答是正确的-类型确实需要有意义;但是,请不要混淆中间的一行:protobuf net可以使用或不使用代码生成,当它使用代码生成时,它使用“protogen”,它在内部使用“protoc”-因此“protoc”的使用稍微隐藏起来。谢谢SethCall。我不确定我是否理解这句话“查看protoc生成的C#代码,并指定您试图从文件中读取的类的typeof()。我不想在“WriteToFile”方法中将“object”参数更改为“actual type”,因为我必须为不同的类型创建多个方法。有什么建议吗?这么说吧;您的签名应该是:private object ReadFromFile(string siteID,Type objectType,string filesystem),其中类型应该是最初进入文件的对象的同一类型。您的回答是正确的-类型确实需要有意义;然而,中间一行有任何混淆:protobuf net可以使用或不使用代码生成,当它使用代码生成时,它使用“protogen”,它在内部使用“protoc”-因此“protoc”的使用被稍微隐藏起来。当您调用ReadFromFile时,objectTemp是什么?这是这里的关键,因为这是您从中获取
类型的地方。就我个人而言,因为您没有合并,所以我只将
类型
传递给此方法,而不是对象。要让它谈论
对象
,您当前必须为它分配一个
新对象()
-因此,它确实不能推断您想要一个
客户
(或其他什么)。当您调用ReadFromFile时,objectTemp是什么?这是这里的关键,因为这是您从中获取
类型的地方。就我个人而言,因为您没有合并,所以我只将
类型
传递给此方法,而不是对象。要让它谈论
对象
,您当前必须为其分配一个
新对象()
——因此,实际上,它不能推断您想要一个
客户
(或其他什么)。