我有一个使用ProtoBuf-net进行序列化的WebApi。很好。
现在,我需要在我的Android应用中使用WebApi。我的问题是,如何在Android中使用反序列化?还是不可能,我必须在WebApi中使用Google.ProtoBuf吗?
我真的很喜欢ProtoBuf-net,因此,如果可以的话,我希望继续使用ProtoBuf-net。我只需要找到在Android中反序列化它的方法。请为我指出正确的方向。
谢谢...
这是从提琴手那里得到的回应
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/x-protobuf
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcWENJRllcRG90TkVUXFVCcm9kXFVXZWJBUElcVVdlYkFQSVxhcGlcZGV2aWNlXEdldEdyb3Vwcw==?=
X-Powered-By: ASP.NET
Date: Wed, 06 Feb 2019 07:36:52 GMT
Content-Length: 76
" XzFood !
& XzClothing !
这是我的模特
private int id = 0;
[ProtoMember(11)]
public int Id
{
get { return id; }
set { id = value; }
}
private string name = string.Empty;
[ProtoMember(15)]
public string Name
{
get { return name; }
set { name = value; }
}
private List<CDProduct> products = new List<CDProduct>();
[ProtoMember(45)]
public List<CDProduct> Products
{
get { return products; }
set { products = value; }
}
答案 0 :(得分:1)
您提到Android,而您提到Java。如果您在Android上使用Java进行编码,则实际上您将无法使用protobuf-net,因为它是.NET特定的-但是protobuf-net会尝试使您轻松进行过渡。在现有代码中,您可以使用:
var proto = Serializer.GetProto<YourRootType>();
这将为您提供一个表示.proto
模型的YourRootType
模式(“ proto2”和“ proto3”等选项)。它通常正常运行,但是如果您使用DateTime
选项拥有DataFormat.WellKnown
和 这样的功能,则可能会有些尴尬(提示:如果可能,请为所有DataFormat.WellKnown
/ DateTime
属性切换到TimeStamp
选项,但请注意,这样做是一项重大更改;这将使用google.protobuf.Timestamp
和Google在“ proto3”时间范围内添加了google.protobuf.Duration
版式。
然后通过protoc
运行该.proto模式,并且应该获取用于同一模型的可用Java代码。
注意:如果要进行调整,请随时更改生成的.proto模式中的名称;名称无关紧要-字段编号和类型:可以。