繁体   English   中英

如何在Android中反序列化ProtoBuf-net

[英]How to deserialize ProtoBuf-net in Android

我有一个使用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; }
}

您提到了Android,而您提到了Java。 如果您在Android上使用Java进行编码,则实际上您将无法使用protobuf-net,因为它是.NET特定的-但是protobuf-net会尝试使您轻松进行过渡。 在现有代码中,您可以使用:

var proto = Serializer.GetProto<YourRootType>();

这将给你一个.proto代表的模型模式YourRootType (有对“proto2”与“proto3”等选项)。 通常可以正常工作,但是如果您有类似DateTime东西并且没有使用DataFormat.WellKnown选项,那么它可能会有些尴尬(提示:如果可能,请为任何DateTime / TimeStamp属性切换到DataFormat.WellKnown选项,但请注意,这样做是一项重大突破;它将使用Google在“ proto3”时间范围内添加的google.protobuf.Timestampgoogle.protobuf.Duration布局)。

然后,通过运行.proto模式protoc ,你应该得到可用的Java代码相同的模型。

注意:如果要进行调整,请随时更改生成的.proto模式中的名称; 名称无关紧要-字段编号和类型:但是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM