JSON .Net序列化无法正常工作

时间:2015-06-24 14:05:16

标签: c# .net json

我有这堂课:

[Serializable]
public class ServerResponse
{
    public string[] Response { get; set; }
    public object Packet { get; set; }

    public ServerResponse(string[] response, object packet){
        this.Response = response;
        this.Packet = packet;
    }

    public string[] getResponse() { return this.Response; }
    public object getPacket() { return this.Packet; }
}

并使用以下内容转换为JSON:

    static void writeToClient(TcpClient client, object message)
    {
        string json = JsonConvert.SerializeObject(message);
        NetworkStream clientStream = client.GetStream();
        byte[] buffer = NetworkHelper.GetMessageAsBytes(json);

        clientStream.Write(buffer, 0, buffer.Length);
        clientStream.Flush();
    }

但是,Packet从未被序列化。谁能看到我做错了什么?样本输出:

{"Response":["message","Authenticated"],"Packet":{}}

这是我尝试序列化的实际课程:

[Serializable]
public class ActiveGameSession
{
    private LoginServerSettings serverSettings;
    private List<UserCharacter> sessionCharacters = new List<UserCharacter>();
    private UserAccount sessionAccount;

    public ActiveGameSession()
    {
        this.sessionCharacters = new List<UserCharacter>();
        this.sessionAccount = null;
        this.serverSettings = null;
    }

    public ActiveGameSession(List<UserCharacter> chars, UserAccount session)
    {
        this.sessionCharacters = chars;
        this.sessionAccount = session;
    }

    #region setters
    public void setCharacters(List<UserCharacter> chars)
    {
        this.sessionCharacters = chars;
    }

    public void setSession(UserAccount session)
    {
        this.sessionAccount = session;
    }

    public void setServerSettings(LoginServerSettings settings)
    {
        this.serverSettings = settings;
    }
    #endregion

    #region getters
    public List<UserCharacter> getCharacters()
    {
        return this.sessionCharacters;
    }

    public UserAccount getAccount()
    {
        return this.sessionAccount;
    }

    public LoginServerSettings getSettings()
    {
        return this.serverSettings;
    }
    #endregion
}

2 个答案:

答案 0 :(得分:3)

JSON.NET可能不支持Object类型对象的序列化。尝试使用更具体的类型。如果您想拥有多种数据包类型,可以尝试使用泛型或从公共基类派生。

编辑: 此外,没有反序列化ActiveGameSession的公共属性,请注意,getXXX,setXXX方法不会被识别为属性。

答案 1 :(得分:-1)

您需要将表示Packet的对象强制转换为JSON.NET可以序列化的类型。尝试转换为字符串并重试。