【问题标题】:save and load nullable strings in JSON files在 JSON 文件中保存和加载可为空的字符串
【发布时间】:2018-08-23 09:55:58
【问题描述】:

对于我的 Unity 游戏,我创建了一个包含 speedrun 时间的 JSON 文件。保存的时间是时间跨度字符串。加载数据时,我将字符串解析为 Timespan 值。保存时间时,我将时间跨度作为字符串保存到文件中。

JSON 文件中的示例级别:

{
  "id": 1,
  "personalBest": "00:00:00.0001336",
  "perfectTime": "00:00:00.0001335",
}

如果一个级别还没有通过,我希望personalBest 属性的值是null 而不是这样的

00:00:00.0000000

99:99:99.9999999

在我的可序列化类中,我目前有此代码

[Serializable]
public class Level
{
    public int id;
    public string? personalBest; // this value could be null
    public string perfectTime;
}

但我得到了这个错误

CS0453 类型“字符串”必须是不可为空的类型才能使用 它作为泛型类型或方法'System.Nullable'中的参数T

是否有解决办法?

【问题讨论】:

  • 你应该看看this question上的brandonscript答案,它解释了很多。
  • 应该关闭这个问题吗?
  • 是的,它是重复的。请注意,您可能应该重新考虑保存内容的方式,您可以通过使personalBest 从包含 id 和时间的外部列表中获取值来避免将其保存为 null

标签: c# json unity3d


【解决方案1】:

所以在 C# 中string 已经是一个可为空的类型。使用普通的string 代替string? 应该没问题。这意味着您可以通过执行以下操作将其设置为 null:

string myString = null;

如果我完全误解了你的问题,请告诉我。

为了在 JSON 中保存 null,check here

【讨论】:

    【解决方案2】:

    关于string 类型需要理解的重要一点是:

    string 是一个引用类型,因此可以为空,并且当 string 字段 已声明但未初始化,它将其值设置为 "" 和 不是null

    即:

    public string myString;
    if (myString != null) {
        Debug.Log("String is not null");
    }
    

    将在控制台中打印String is not null

    这就是让一些人失望的原因,因为通常引用类型在声明但尚未初始化时默认设置为null

    但是,如果您使用自动属性而不是字段来声明变量,那么它将表现为任何其他引用类型,即默认情况下为 null

    public string myString {get;set;}
    if (myString == null) {
        Debug.Log("String is null");
    }
    

    将在控制台中打印String is null

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多