在JSON文件中保存并加载可空字符串

时间:2018-03-14 18:17:34

标签: c# json unity3d

对于我的Unity游戏,我创建了一个保存speedrun时间的JSON文件。保存的时间是Timespan字符串。加载数据时,我将字符串解析为Timespan值。保存时间时,我将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 类型'字符串'必须是非可空类型才能使用   它作为通用类型或方法中的参数T' System.Nullable'

可以采用解决方法吗?

2 个答案:

答案 0 :(得分:2)

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

string myString = null;

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

为了在JSON中保存null,check here

答案 1 :(得分:1)

有关string类型的重要事项是:

  

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

即:

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

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

这是抛弃一些人的原因,因为通常在声明但尚未初始化时的引用类型默认将其值设置为null

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

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

将在控制台中打印String is null