有没有一种方法可以使以前的 public 无参数构造函数成为私有的,而不会使它成为 protobuf(反)序列化的破坏性变化?
Is there a way to make a previously-public parameterless constructor private without making it a breaking change for protobuf (de)serialization?
考虑到此 class 被其他项目 and/or 库消耗:
[Serializable, DataContract]
public class MatchResult
{
[DataMember(Order = 1)]
public long MatchId {get; set;}
[DataMember(Order = 2)]
public long TeamId {get; set;}
[DataMember(Order = 3)]
public MatchStatus Status {get; set;}
[DataMember(Order = 4)]
public List<AgentMatchInfo> AgentMatchInformation {get; set;}
public MatchResult()
{
// I want to make this a private one, without the consumers seeing
// errors that their declaration using
// this current public constructor is no loner applicable.
}
}
当构造函数声明当前被显式调用时,您如何正确地使当前-public
无参数构造函数 private
用于 protobuf(反)序列化而不使其成为破坏性更改消费者?
让当前的 public
构造函数有一个可选参数,同时添加一个 private
无参数构造函数是一个好习惯吗?
Protobuf-net 应该 可以使用非public 构造函数。也许您使用的是受限框架?在大多数情况下,如果仅使用私有构造函数 (private MatchResult() {}
) 不起作用,我会感到非常惊讶。
另一种方法是完全跳过构造函数 ,您可以使用 [ProtoContract(SkipConstructor = true)]
代替 [DataContract]
,并使用 [ProtoMember(N)]
代替[DataMember(Order = N)]
- 但是,我想知道这是否会在那些非 public 构造函数失败的框架上失败。
考虑到此 class 被其他项目 and/or 库消耗:
[Serializable, DataContract]
public class MatchResult
{
[DataMember(Order = 1)]
public long MatchId {get; set;}
[DataMember(Order = 2)]
public long TeamId {get; set;}
[DataMember(Order = 3)]
public MatchStatus Status {get; set;}
[DataMember(Order = 4)]
public List<AgentMatchInfo> AgentMatchInformation {get; set;}
public MatchResult()
{
// I want to make this a private one, without the consumers seeing
// errors that their declaration using
// this current public constructor is no loner applicable.
}
}
当构造函数声明当前被显式调用时,您如何正确地使当前-public
无参数构造函数 private
用于 protobuf(反)序列化而不使其成为破坏性更改消费者?
让当前的 public
构造函数有一个可选参数,同时添加一个 private
无参数构造函数是一个好习惯吗?
Protobuf-net 应该 可以使用非public 构造函数。也许您使用的是受限框架?在大多数情况下,如果仅使用私有构造函数 (private MatchResult() {}
) 不起作用,我会感到非常惊讶。
另一种方法是完全跳过构造函数 ,您可以使用 [ProtoContract(SkipConstructor = true)]
代替 [DataContract]
,并使用 [ProtoMember(N)]
代替[DataMember(Order = N)]
- 但是,我想知道这是否会在那些非 public 构造函数失败的框架上失败。