在Unity C#脚本中解码Json字符串



我正在尝试将JSON字符串解码为单个元素。下面是我的代码。结果它返回null。

var topOfHead = landmarks.Landmark[10];
string jsonString = topOfHead.ToString();
//Json in String  - tophead:{ "x": 0.8063538, "y": 0.6247897, "z": -0.0117829954 }
DistanceVector serialized = JsonUtility.FromJson<DistanceVector>(jsonString);
//Debug.Log("Headposition: " + serialized.x);

距离矢量类

[SerializeField]
public class DistanceVector{
public double? x{get; set;}
public double? y{get; set;}
public double? z{get; set;}
}

在这种情况下,序列化的.x值将变为零。

Unity中的JsonUtility对所有对象都遵循相同的序列化规则。这意味着你不能对字典这样的东西进行原生序列化。这也意味着您不能(取消(序列化属性或null值。

为了解决这个问题,你必须修改你的代码:

[Serializable]
public class DistanceVector
{
public double x;
public double y;
public double z;
}

如果您希望Unity也通过Inspector序列化该类,则该类应该使用[Serializable]属性进行装饰。

我想下面的注释实际上并没有包括Json中的"tophead"字符串?

//Json in String  - tophead:{ "x": 0.8063538, "y": 0.6247897, "z": -0.0117829954 }

如果Json确实包含"tophead",你能移除它吗?否则,"tophead"将被视为其自身的元素,因此您需要取消对包含其自身类型为DistanceVector的字段的项的序列化。例如:

[Serializable]
public class Container
{
public DistanceVector tophead;
}
var tophead = JsonUtility.FromJson<Container>(jsonString).tophead;

JsonUtility还将要求Json格式为:

{ "tophead":{ "x": 0.8063538, "y": 0.6247897, "z": -0.0117829954 } }

另一种选择是使用不同的Json序列化程序,如Newtonsoft.Json或System.Text.Json(我的偏好(。

不要使用"quot;因为它将当前变量检测为可为null,并且返回null值。

用这个public double x{get; set;}代替这个public double? x{get; set;}

最新更新