【问题标题】:C# Refresh Properties Of An Existing ObjectC# 刷新现有对象的属性
【发布时间】:2021-08-10 11:34:03
【问题描述】:

假设你有以下类:

public class Class1
{
  public int a;
}

然后,您序列化该类并将其作为 JSON 保存在您的数据库中。 然后,您将 JSON 格式转换回 Class1 实例。

但是Class1 可能会发生变化:这意味着属性可能会以不同的方式命名或将新的属性添加到我的类中。

修改 Class1 示例:

public class Class1 
{
  public int a;
  public int b;
}

我想做的是保留我从 JSON 中获取的所有现有属性,同时初始化新属性。

请记住,Class1 只是一个示例,实际的类将包含许多嵌套对象。

我想过创建一个新实例,但我不太确定如何更新每个属性(因为其中一些属性将被嵌套,其中只有一些被实际修改)。

【问题讨论】:

  • "同时初始化新的" --> 构造函数?构造函数将首先运行,您初始化所有属性,然后将 json 反序列化为匹配的属性。在这种情况下,您将有机会首先将b 设置为一个值,如果需要,还可以设置a,然后a 将被赋予一个来自json 的新值。
  • 如果您想拥有一个现有实例并“反序列化 它”,那么我不确定任何 json 库都支持它,而且里面什么都没有.NET 很容易允许它。
  • 只是为了强化@LasseV.Karlsen 所说的话,大多数JSON 库创建 新对象引用,它们通常不会将 序列化为 现有参考。这是因为他们动态构建对象,而不是仅仅分配现有对象的属性。
  • @Lasse V. Karlsen 当我初始化它们时,存储在 JSON 中的值不会被默认值覆盖吗?什么保证他们不会?编辑:再想一想,这是一个愚蠢的问题。我只是不知道来自 JSON 的反序列化会自动匹配这些值。谢谢! :)
  • 您还说“属性可以命名不同”,这需要完全不同的解决方案。在这种情况下,您可能需要处理版本控制,具有可用类型的多个版本,反序列化为您拥有的 json 版本的正确版本,然后从旧实例映射到新实例。这就是为什么我说一个答案对你没有帮助,你的范围有点不清楚、模糊和大。

标签: c# object


【解决方案1】:

您好,您可以使用初始化程序来做到这一点:

public class Class1 
{
  public int a { get; set; } = 10;
  public Class2 b { get; set; } = new Class2();
}

您不能(至少使用 JsonUtility)序列化属性。只有字段。

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2018-03-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多