gpt4 book ai didi

protobuf-net - ProtoBuf-NET 的 OnDeserialized 属性

转载 作者:行者123 更新时间:2023-12-02 04:36:35 28 4
gpt4 key购买 nike

我们使用 JSON.NET 将我们的数据与 OnDeserialized 属性一起序列化以在反序列化后执行自定义代码:

[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
...
}

现在我们尝试使用 protobuf 而不是 JSON.NET 并且此方法未执行。是否有另一种方法可以使用 protobuf.net 实现此行为?

这是一个不起作用的例子:

class Program
{
static void Main(string[] args)
{
RuntimeTypeModel.Default.Add(typeof (Profile), false).Add(1000, "Id").Add(1001, "Text");

var test = new Profile {Id = Guid.NewGuid(), Text = "123"};

using (var memoryStream = new MemoryStream())
{
Serializer.Serialize(memoryStream, test);

memoryStream.Seek(0, SeekOrigin.Begin);

var deserialized = Serializer.Deserialize<Profile>(memoryStream);

Console.WriteLine(deserialized.Text); // should output "changed"
Console.ReadLine();
}
}
}

[ProtoContract]
public class Profile
{
public Guid Id { get; set; }
public string Text { get; set; }

[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
Text = "changed";
}
}

最佳答案

对我来说很好:

[ProtoContract]
public class Foo
{
[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
Console.WriteLine("OnDeserializedMethod");
}

[ProtoMember(1)]
public string Bar { get;set; }

static void Main()
{
var foo = new Foo { Bar = "abc" };
var clone = Serializer.DeepClone(foo);
Console.WriteLine(clone.Bar);
}
}

输出:

OnDeserializedMethod
abc

能具体点吗?也许展示一个完整的例子来重现你所看到的?另外:您确定您正在使用 protobuf-net 吗?有些人对 protobuf-net 和 protobuf-csharp-port 感到很困惑。我无法评论后者支持哪些功能。

关于protobuf-net - ProtoBuf-NET 的 OnDeserialized 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21855199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com