我猜您的类型在无参数构造函数中将字符串显式设置为“”。你能检查一下吗?
protobuf-net 处理这个问题的方式是:
- 对于 a
null
,不发送任何内容(protobuf 有线格式无法明确表达 a null
,但我们可以将其视为可选并省略它)
- 对于 a
""
,发送一个长度为 0 的模式,应将其反序列化为""
- 对于非空字符串,长度和字符串被发送,并被反序列化
在反序列化期间,null
如果它只是让您的字段/属性单独存在,因为它没有要处理的数据。如果类型设置为默认值,""
它将保持为""
.
请注意,在“v2”(我预计在接下来的两周内发布)中,您可以选择告诉它使用“不运行任何构造函数”的 WCF 方法,这将具有让它保持不变的效果,null
即使默认构造函数分配它。
您还可以使用一些技巧(使用“v1”)发送bool
标志(作为单独的属性)来表示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 ?? "");}
}
}