C# Unity JsonUtility不';不能正确地将字符串转换为对象

C# Unity JsonUtility不';不能正确地将字符串转换为对象,c#,json,unity3d,C#,Json,Unity3d,我正在使用JsonUtility将json字符串反序列化为数据包 if (client.ReceiveBufferSize > 0) { var ns = client.GetStream(); Byte[] bytes = new byte[client.ReceiveBufferSize]; ns.Read(bytes, 0, client.ReceiveBufferSize); string msg = Enc

我正在使用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;
    }
但是,在转换后,数据包如下所示:

{
    "Command": "Message",
    "Message": null
}

有人知道为什么会发生这种情况,或者是否有其他选择?(除了NewtonSoft,因为它在Unity中有问题)

我认为您的主要问题是使用类型错误

基本上可以这样做:

public Packet returnAsJson(string jsonString)
    {
        return JsonUtility.FromJson<Packet>(jsonString);
    }
在您的例子中,这将返回
数据包
,作为带有json变量的对象


*如果要使用object而不是string,请首先确保可以从字符串创建对象,如果这不起作用,则可以创建一个新类

并创建函数,将字符串作为正确的类型放入类中

public class FinalPacket
{
    public command Command;
    public object Message;
}

public void FinalPacket(Packet pak)
{
//put the variables to the new class
}

为什么你需要对象而不是字符串?因为我发送的是整数、类、布尔值、状态等等。在反序列化之前,你知道它是不是一个int、类等吗?@DavidG不,我不知道,我曾想过使用泛型,但想不出一种方法来实现它。问题是为什么JsonUtility不能像Newtonsoft这样的其他软件包那样反序列化它。我接受了另一个答案,因为它确实提供了一个解决办法。但如果您有另一个解决方案,我很乐意接受您的解决方案。这可能是OP需要使用
对象的一个很好的原因,这就是我在评论中询问的原因。修复了使用另一个解决方案时这些都不起作用;)a) 
命令
是一个
int
而不是一个
字符串
(它没有包装在
)b)类需要被标记
[Serializable]
,否则Unity根本不能反序列化它。c)
对象
也不能序列化,所以第二件事不能工作!它是一个
字符串
(请参阅)
public class Packet
{
    public string Command;
    public string Message;
}
public class FinalPacket
{
    public command Command;
    public object Message;
}

public void FinalPacket(Packet pak)
{
//put the variables to the new class
}