1

だから私は小さな問題があります:

メッセージは MQTT を使用して送信され、C# で protobuf-net を使用してシリアル化された一連のオブジェクトで構成されます (このコードを変更することはできませんが、ソースにはアクセスできます)。もう一方の端で、シリアライズされたオブジェクトを Java で受け取ります。問題は、protobuf を使用してオブジェクトをデシリアライズできないように見えることです。誰かがこの問題を抱えて解決したことがある場合は、助けてください :)

C# のオブジェクトの例:

using ProtoBuf;

namespace Concentrator.Services
{
[ProtoContract]
public class MeterID
{
    private byte[] _id;

    [ProtoMember(1)]
    public byte[] ID
    {
        get { return _id; }
        set { _id = value.Length == 16 ? value : null; }
    }

    [ProtoMember(2)] public string MeterType;
}
}

Java で同じオブジェクトを再作成しようとする試み (.proto ファイル):

syntax = "proto2";

 package mqtt.entity;

 option java_package = "mqtt.entity";
 option java_outer_classname = "ProtoMeter";
 message Meter {
    optional bytes ID = 1;
     optional string MeterType = 2;
  }

  message MeterID {
     repeated Meter mid = 1;
 }

この例の解決策は非常に役立ちます。どうもありがとうございました。

オブジェクトが C# で逆シリアル化されるコード:

var ms = new MemoryStream(data, 7, data.Length - 9)
var res = Serializer.Deserialize<List<MeterID>>(ms);

これはC#で機能します。Javaで同じことを達成しようとしています

4

2 に答える 2