インラインで true に初期化されたブール値のメンバーを持つ型をシリアル化する場合 - オブジェクトの逆シリアル化では常に値を true として取得します (明らかに、問題は、シリアル化の前にメンバーの実際の値が false だった場合です)。これは逆の場合には発生しません (インラインで false に初期化され、オブジェクト値が true - 他の操作や他のデータ メンバー型も試しましたが、すべて正常に動作します)。
ここにタイプがあります:
[ProtoContract]
public class SomeObject
{
public SomeObject() {}
[ProtoMember(1)]
private bool m_SomeMember = true;
public bool SomeMember
{
get { return m_SomeMember; }
set { m_SomeMember = value; }
}
}
コードは次のとおりです。
var stream = new MemoryStream();
var data = new SomeObject() {SomeMember = false};
Serializer.SerializeWithLengthPrefix<SomeObject>(stream, data , PrefixStyle.Base128);
stream.Position = 0;
var deserializedObject = Serializer.DeserializeWithLengthPrefix<SomeObject>(stream, PrefixStyle.Base128);
逆シリアル化されたオブジェクトの値を見ていると、SomeMember の値は true です。インラインメンバーの初期化コードはコンパイラによってデフォルトのctorに挿入される必要があるため、これはあまり意味がありません-そして、私が理解している限り、protobufはctorが呼び出された後にのみメンバーの値を設定する必要がありますそれ以外の場合は可能です) それで、ヘルプ? (マルク?)