如何在WebReference的类中指定ProtoBuf-Net属性?
我有一个.net 2.0 Web服务,我在其中使用protobuf创建一个byte []。 在我的客户端(v3.5)中,我想将byte []反序列化到相应的类中。 但是,当我反序列化时,我得到的是0并且为空。
原因是我将类型指定为Web Reference类。
using (MemoryStream stream = new MemoryStream(byteArray))
{
List<WebReferencePerson> personsList = Serializer.DeserializeWithLengthPrefix<List<WebReferencePerson>>(stream, PrefixStyle.Base128);
stream.Close();
}
但是,如果我在客户端创建另一个类Person1并指定Proto属性[ProtoContract]和[ProtoMember()],我会得到反序列化的正确数据。 即
[ProtoContract]
class Person1
{
[ProtoMember(1)]
string Name {get;set;}
[ProtoMember(2)]
int Id {get;set;}
}
List<Person1> personsList =
Serializer.DeserializeWithLengthPrefix<List<Person1>>(stream, PrefixStyle.Base128);
是否有办法使用Web Reference中的类来反序列化数据? 如何为Web Reference类指定Protobuf属性? 要么 我是否必须使用Proto属性指定另一个类来反序列化来自WebService的数据?
答案 0 :(得分:0)
asmx生成的类型不会有标记标记标记;有很多方法可以解决这个问题:
第二个选项如下:
namespace Your.Namespace {
[ProtoContract]
[ProtoPartialMember(1, "Name")]
[ProtoPartialMember(2, "Id")]
partial class WebReferencePerson {}
}
第三个选项是app-start的一部分:
RuntimeTypeModel.Default.Add(typeof(WebReferencePerson), false)
.Add("Name", "Id");
使用这些方法中的任何一种,都应该反序列化。