c# - protobuff-net 保存/加载静态字段
问题描述
无论如何要在 ProtoBuffNet 中保存静态字段或最佳的完整静态类。保存后 person.bin 大小为 0,所以我认为问题在于它没有保存任何静态字段。
using ProtoBuf;
using System;
using System.IO;
using System.Windows.Forms;
namespace ProtoBuffNet
{
[ProtoContract(SkipConstructor = true)]
public class Person
{
[ProtoMember(1)]
public static int Id = -1;
[ProtoMember(2)]
public static string Name = "";
}
public partial class Form1 : Form
{
Person person = new Person();
public Form1()
{
InitializeComponent();
}
public static void setPerson()
{
Person.Id = 12345;
Person.Name = "Fred";
}
public static void resetPerson()
{
Person.Id = -1;
Person.Name = "";
}
private void button1_Click(object sender, EventArgs e)
{
setPerson();
using (var file = File.Create("person.bin"))
{
Serializer.Serialize(file, person);
}
// person Here:
// person.Id = 12345
// person.Name = "Fred"
}
private void button2_Click(object sender, EventArgs e)
{
resetPerson();
Person newPerson;
using (var file = File.OpenRead("person.bin"))
{
newPerson = Serializer.Deserialize<Person>(file);
}
// What happens:
// newPerson.Id = -1
// newPerson.Name = ""
// What I want:
// newPerson.Id = 12345
// newPerson.Name = "Fred"
}
}
}
上面的代码运行,但似乎没有保存静态字段。如果 Person 类也可以是静态的,那将是最佳选择。
解决方案
现在,这个库是面向实例的——通常是对象。坦率地说,大多数序列化工具都是。您可以使用仅将实例值代理到静态成员的 shim 对象来伪造它,但是......它并不是专门针对的场景。
推荐阅读
- kubernetes - Calico 在我的 k8s 中运行良好,但我无法在节点上 Ping clusterip
- html - 检查 padding-top: env (safe-area-inset-top);
- performance - 寻找使用 MATLAB 计算矩阵的更快方法
- multithreading - Perl Tcp 传输不一致
- java - 在实现 Spring Security 时,在类路径资源中创建名称为“springSecurityFilterChain”的 bean 时出错
- api - 如何将路径从 cname 记录传递到 ALB?
- javascript - 用于 Javascript 的 Lambda RDS 数据 API 中的测试执行错误
- laravel - Laravel 升级建议
- android - 在没有“服务”的情况下处理在 android 中被杀死的应用程序的更好方法
- flutter - 小部件库捕获的异常构建函数返回 null