我正在尝试将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值将变为零。
为了解决这个问题,你必须修改你的代码:
[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;}