2011-10-25 16 views
1

私のアンドロイドデバイスの.netプロジェクトからデータを取得しようとしています。アンドロイドとの間でデータを送受信します

DefaultHttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet("http://192.168.0.100/protobufnet/Default.aspx"); 

    HttpResponse response; 
    response = client.execute(request); 
    DataPacket.Data data = DataPacket.Data.parseFrom(response.getEntity().getContent()); 

をDataPacket.Dataは私が手で書いて、この

message Data { 
required int32 Status = 1; 
message Building { 
    required string Id = 1; 
    optional string Name = 2; 
    optional string Description = 3; 
    message RentSpace { 
     required string Id = 1; 
     optional string Name = 2; 
     optional string Description = 3;    
     message Year { 
      required int32 Year = 1; 
      message Item { 
       required string Id = 1; 
       optional string Name = 2; 
       optional string Description = 3;   
       optional string FunctionDescription = 4;   
       required bool Marked = 5; 
       required bool Remark = 6; 
       required bool SelfLearning = 7; 
       optional string Comment = 8; 
       repeated bool ActiveMonths = 9 [packed=true]; 
      } 
      repeated Item Items = 2; 
     } 
     repeated Year Years = 4; 
    } 
    repeated RentSpace RentSpaces = 4; 
} 
repeated Building Buildings = 4; 

}

のように見える私の.protoファイルから自動生成されています:私はこのコードを使用していますAndroid上

今、私はこの.protoファイルに対して.netプロジェクトの検証を行う方法を知らないので、私はちょうど私がこれと同じであると仮定したものをコード化しました:

[ProtoContract] 
public class DataPacket 
{ 
    [ProtoMember(1)] 
    public int Status { get; set; } 
    [ProtoMember(2)] 
    public List<Building> Buildings { get; set; } 
} 

[ProtoContract] 
public class Building 
{ 
    [ProtoMember(1)] 
    public String Id {get;set;} 
    [ProtoMember(2)] 
    public String Name {get;set;} 
    [ProtoMember(3)] 
    public String Description {get;set;} 
    [ProtoMember(4)] 
    public List<RentSpace> RentSpaces { get; set; } 
} 

[ProtoContract] 
public class RentSpace 
{ 
    [ProtoMember(1)] 
    public String Id {get;set;} 
    [ProtoMember(2)] 
    public String Name {get;set;} 
    [ProtoMember(3)] 
    public String Description {get;set;} 
    [ProtoMember(4)] 
    public List<YearList> Years {get;set;} 
} 

[ProtoContract] 
public class YearList 
{ 
    [ProtoMember(1)] 
    public int Year; 
    [ProtoMember(2)] 
    public List<ListItem> Items {get;set;} 
} 

[ProtoContract] 
public class ListItem 
{ 
    [ProtoMember(1)] 
    public String Id {get;set;} 
    [ProtoMember(2)] 
    public String Name {get;set;} 
    [ProtoMember(3)] 
    public String Description {get;set;} 
    [ProtoMember(4)] 
    public String FunctionDescription { get; set; } //how to do the control 

    [ProtoMember(5)] 
    public bool Marked { get; set; } 
    [ProtoMember(6)] 
    public bool Remark { get; set; } 
    [ProtoMember(7)] 
    public bool SelfLearning { get; set; } 
    [ProtoMember(8)] 
    public string Comment { get; set; } 
    [ProtoMember(9)] 
    public bool[] ActiveMonths { get; set; } 

しかし、動作しません。私はどちらかを参照する必要があります.netプロジェクトを使用するか、私の.protoを検証するためにそれを強制的に

答えて

1

protobuf-netのv1 zipは、基本的にprotobuf-netの "protoc"いくつかのステップではprotocを内部的に使用します。このツールはv2では変更されておらず、v2ライブラリと一緒に使用すると問題ありません。

Visual Studioを使用している場合は、ツール内で同じことを行うIDEツールもあります。つまり、プロジェクトに.protoを追加するだけで、一致するC#が生成されます。

手動でタイプモデルを作成することも可能です - 私は座って、あなたの.protoとあなたのC#の違いを見るために非常に慎重に見る必要があります(もちろん、それは働いていない "も助けになるだろう)。

チェックするべきもう1つの明白な点は、もちろん、(別の)転送コードで正しいバイトが得られることです。

+0

非常に迅速に対応していただきありがとうございます。 protoファイルでVSツールを使用しましたが、これは1つの例外を除いて美しく見えます:.protoの "Building Buildings = 4;設定されていないプロパティを取得するだけです。だから私は建物のリストを設定することはできません。 –

+0

@Rickardコレクションのプロパティがget-onlyになるのはかなり普通です。ちょうどAdd/Clear/AddRangeなどを取得/設定したい場合、xsltは編集可能です –

+0

私は何年も前に.netをやっておらず、 、 ありがとうございました。どのくらい早くあなたがここに返信するのを好き: –

関連する問題