在 JSON 文件中保存和加载可为空的字符串
Posted
技术标签:
【中文标题】在 JSON 文件中保存和加载可为空的字符串【英文标题】:save and load nullable strings in JSON files 【发布时间】: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
【参考方案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
。
【讨论】:
以上是关于在 JSON 文件中保存和加载可为空的字符串的主要内容,如果未能解决你的问题,请参考以下文章