【发布时间】:2021-08-03 16:45:45
【问题描述】:
我正在使用 JsonUtility 将 json 字符串反序列化为数据包。
if (client.ReceiveBufferSize > 0)
{
var ns = client.GetStream();
Byte[] bytes = new byte[client.ReceiveBufferSize];
ns.Read(bytes, 0, client.ReceiveBufferSize);
string msg = Encoding.ASCII.GetString(bytes); //the message incoming
var packet = JsonUtility.FromJson<Packet>(msg);
return packet;
}
收到时msg 是:{"Command":0, "Message":"Hello Client..."}
我正在尝试将其转换为如下所示的 Packet 类:
public class Packet
{
public Command Command { get; set; }
public object Message { get; set; }
}
但是,我转换后的数据包如下:
{
"Command": "Message",
"Message": null
}
有谁知道为什么会发生这种情况或是否有其他选择? (除了 NewtonSoft,因为它在 Unity 中存在问题)
【问题讨论】:
-
为什么你需要对象而不是字符串?
-
因为我通过整数、类和布尔值、状态等发送。
-
在反序列化之前你知道它是否会是一个 int、class 等吗?
-
@DavidG 不,我没有,我确实想过使用泛型,但想不出办法让它发挥作用。问题是为什么 JsonUtility 不能像 Newtonsoft 这样的其他软件包可以反序列化它。我接受了另一个答案,因为它确实提供了一种解决方法。但如果你有另一个我会很乐意接受你的