あなたのタイプは、パラメーターなしのコンストラクターで明示的に文字列を "" に設定していると思います。チェックしていただけますか?
protobuf-net がこれを処理する方法は次のとおりです。
- a の
null
場合、何も送信されません (protobuf ワイヤ形式には a を明示的に表現する方法はありませんがnull
、オプションとして処理して省略できます)
- の場合、
""
長さ 0 のパターンが送信されます。これは、次のように逆シリアル化する必要があります。""
- 空でない文字列の場合、長さと文字列が送信され、逆シリアル化されます
逆シリアル化中に、null
処理するデータがないため、フィールド/プロパティをそのままにしておく場合。タイプがデフォルトを に設定している場合、その""
ままになります""
。
"v2" (今後 2 週間以内にこれをリリースする予定です) では、必要に応じて、"コンストラクターを実行しない" という WCF アプローチを使用するように指示できますnull
。デフォルトのコンストラクターがそれを割り当てます。
bool
を意味するフラグを(別のプロパティとして)送信するために(「v1」を使用して)実行できるいくつかのトリックもありますnull
。この例が必要な場合はお知らせください。
編集:これを回避するための「v1」トリックの例を次に示します。ただし、「コンストラクターを無視する」という「v2」アプローチは、おそらく長期的にはより良いオプションです。
[DataContract]
class Test {
public Test() { Value = ""; } // a constructor that assigns the value
[DataMember(Order = 1)]
public string Value { get; set; } // our standard data
[DataMember(Order = 2)]
private bool ValueIsNull { // only exists to indicate explicit null
get { return Value == null; }
set { Value = value ? null : (Value ?? "");}
}
}