Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何找到;三角洲;或;“差别”;在使用protobuf.net的两个对象之间,要跟踪的对象已更改_C#_Serialization_Synchronization_Protobuf Net - Fatal编程技术网

C# 如何找到;三角洲;或;“差别”;在使用protobuf.net的两个对象之间,要跟踪的对象已更改

C# 如何找到;三角洲;或;“差别”;在使用protobuf.net的两个对象之间,要跟踪的对象已更改,c#,serialization,synchronization,protobuf-net,C#,Serialization,Synchronization,Protobuf Net,我知道这个问题很模糊,但假设我有两个对象 Object A { Id: 1, Title: "Abc", Flag: true } Object B { Id: 1, Title: "", Flag: false } 有没有办法找到改变的地方?知道标题设置为“”(或null为ok)且标志设置为false 我的所有对象目前都是用protobuf.net(C#)序列化的,我想知道是否有一种“神奇”的方法可以做到这一点。这些对象有100多个属性,因此我希望有一种方法可以一个

我知道这个问题很模糊,但假设我有两个对象

Object A
{
  Id: 1,
  Title: "Abc",
  Flag: true
}

Object B
{
  Id: 1,
  Title: "",
  Flag: false
}
有没有办法找到改变的地方?知道标题设置为“”(或null为ok)且标志设置为false

我的所有对象目前都是用protobuf.net(C#)序列化的,我想知道是否有一种“神奇”的方法可以做到这一点。这些对象有100多个属性,因此我希望有一种方法可以一个接一个地执行

我们能按语法枚举所有属性并将其存储在通用容器中吗

该代码用于从并发用户同步对象的上下文中


感谢protobuf net本身不跟踪差异-这根本不是一个功能(它没有“上下文”包装来存储before/after状态)。然而,您的类型可以,如果它喜欢的话,protobuf-net能够使用“条件序列化”来只传输增量。这实际上是对的重新声明,其中包括一个这样做的代码示例。

我认为原则上应该是可行的,但我不知道如何实现。但你希望得到什么样的产出呢?考虑对象可能包含其他对象或对象列表。所以,指定对象上不同的属性可能有点复杂。简短的回答是“是的,这是可能的”。长答案需要等到我在我的电脑前才能给出。上下文:protobuf的作者-net@JonasH这是一个好问题,我可以做任何可以工作的事情,包括“属性”数组:“值”。我知道你是谁,非常感谢你的调查!我对0、false和null存在问题,它们并没有按照我的示例中所述进行序列化。是RuntimeTypeModel.Default.Fault=false;耍花招?这是否会影响我进行序列化的其余代码?@Zyo是的,这是工作中的隐式零(这是proto3想要的,注意);我不检查就记不起来了,但条件序列化可能会覆盖它;如果在默认模型上更改它(如果可以在默认模型上更改),那么:使用默认模型的所有内容都将受到影响。但是,您可以有多个模型,并使用一个不同的模型,该位禁用隐式零。在99%的时间里,我们需要传输、保存和加载更小的数据。我不想打破这个。我想知道2个对象之间的差异,而不是0和null之间的真正差异。@Zyo这不是与此库相关的功能,所以:这是您需要自己做的事情。我已经将您链接到一个跟踪简单更改的机制——它是否满足您的要求是另一回事。