Как десериализовать ProtoBuf-сеть в Android - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть WebApi, который использует ProtoBuf-net для своей сериализации.Он отлично работает.

Теперь мне нужно использовать WebApi в моем приложении для Android.У меня вопрос, как использовать десериализацию в Android?Или это не возможно, и я должен использовать Google.ProtoBuf в своем WebApi?

Мне действительно нравится ProtoBuf-net, поэтому, если бы я мог, я бы хотел продолжать использовать ProtoBuf-net,Мне просто нужно отыскать, чтобы десериализовать его в Android.Пожалуйста, укажите мне правильное направление.

Спасибо ...

ОБНОВЛЕНИЕ:

Вот ответ при получении от Fiddler

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; }
}

1 Ответ

0 голосов
/ 06 февраля 2019

Вы упоминаете Android, и вы упоминаете Java.Если вы пишете код на Java на Android, то на самом деле вы не сможете использовать 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.protobuf.Duration, добавленные Google на таймфрейме "proto3").

Затем вы запускаете эту схему .proto через protoc, и вы должны получить пригодный для использования Java-код для той же модели.

Примечание: не стесняйтесь изменятьимена в сгенерированной схеме .proto, если вы хотите настроить ее;имена не имеют значения - номера полей и типы, однако: do.

...