ImtoをNetDataContractSerializer(またはBinarySerializer)としてProtoBuf.Netを使用してPOCします。 ここにコードを投稿しましたcode。 試行錯誤していて、List、Dictionaryなどではまだ動作しません。 間違った方向に入っているようです。 これは実現可能ですか?ProtoBuf.Net - TypeFormatterとしてProtoを使用します。
フィードバックは高く評価されます。
ImtoをNetDataContractSerializer(またはBinarySerializer)としてProtoBuf.Netを使用してPOCします。 ここにコードを投稿しましたcode。 試行錯誤していて、List、Dictionaryなどではまだ動作しません。 間違った方向に入っているようです。 これは実現可能ですか?ProtoBuf.Net - TypeFormatterとしてProtoを使用します。
フィードバックは高く評価されます。
私はProtobuf.netを使用している、と私はこのように私のクラスをマークすることによって、それをやった:
namespace music
{
[ProtoContract]
public class Album
{
[ProtoMember(1)]
public string Name { get; set; }
[ProtoMember(2)]
public List<string> TrackList { get; set; }
}
}
これも辞書やリストのために動作します。
同じ番号の規則は、.proto・メッセージ・ファイルを使用すると、属性に適用されますが、あなたは、このような基底クラスのプロパティを含めることができます。
[ProtoContract]
[ProtoInclude(10, typeof(TypeInheritingFromPerson))]
[ProtoInclude(11, typeof(AnotherTypeInheritingFromPerson))]
public abstract class Person
{
[DataMember]
[ProtoMember(1)]
public string Name { get; set; }
...
、その後、シリアライズのコード行を使用した:
もちろん利用FILESTREAMの代わりに、メモリストリーム:)のことができます
MemoryStream stream = new MemoryStream();
ProtoBuf.Serializer.Serialize<Album>(stream, album);
あなたはWCFを使用している場合は、のためにDataContractSerializerを入れ替えることができますProtobufシリアライザをこのような設定ファイル(protobuf.netのドキュメントから貼り付けられたコピー)に直接入れるため、シリアル化コードを手動で呼び出す必要はありません。
system.serviceModelセクション:
<behaviors>
<endpointBehaviors>
<behavior name="ProtoBufBehaviorConfig">
<ProtoBufSerialization/>
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="ProtoBufSerialization" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net, Version=1.0.0.255, Culture=neutral, PublicKeyToken=257b51d87d2e4d67"/>
</behaviorExtensions>
</extensions>
は、次のようにbehaviorConfigurationを持っているあなたのエンドポイントを設定します。
<service name="TK.Framework.Samples.ServiceModel.Contract.SampleService">
<endpoint address="http://myhost:9003/SampleService" binding="basicHttpBinding" behaviorConfiguration="ProtoBufBehaviorConfig"
bindingConfiguration="basicHttpBindingConfig" name="basicHttpProtoBuf" contract="ISampleServiceContract" />
</service>
<client>
<endpoint address="http://myhost:9003/SampleService" binding="basicHttpBinding"
bindingConfiguration="basicHttpBindingConfig" contract="ISampleServiceContract"
name="BasicHttpProtoBufEndpoint" behaviorConfiguration="ProtoBufBehaviorConfig"/>
</client>
私はこれがあなたのために有用であると思いますが、ご質問、または何かを持っているなら、私に知らせては不明です:)
私はProtobuf.NetV2を使用し、実行時登録(コードが添付されています)を使用しています。リストやディクショナリを直列化することはできません。リスト/ディクショナリをシリアル化するためにProtobufが使用しているものは見当たりませんそのメンバーは原属性でマークされていません。 – eyan
データ/クラス構造はどのように見えますか?あなたはprotobuf属性で飾ることができないタイプを使用していますか? – Franchesca
hmm ... ProtoBuf.Meta名前空間で利用できるものを見ましたか? – Franchesca
事前に候補ルートタイプの完全なセットがわかっていますか?または、完全に未知の型をシリアル化するつもりですか? –
は事前に知られていますが、タイプは、シリアル化とデシリアライズの両方で知られています – eyan