Newtonsoft JSON反序列化对象序列化对象的反序列化

时间:2016-05-02 20:15:27

标签: c# json json.net deserialization json-deserialization

我正在返回以下JSON字符串,我正在尝试反序列化,但是我遇到了填充对象属性值的问题。

这是返回的JSON字符串:

"{\"ClientData\":[{\"clientID\":9999999,\"userID\":123,\"authID\":\"8a20627be9ec4c608f4c609a24e74174\"}]}"

现在,我通过以下方式指定了ClientData类:

public class ClientData
{
    [JsonProperty("clientID")]
    public long? ClientID { get; set; }

    [JsonProperty("userID")]
    public int? UserID { get; set; }

    [JsonProperty("authID")]
    public string AuthID { get; set; }
}

我在转换中遇到了什么问题?我认为这就像指定:

一样简单
var result = JsonConvert.DeserializeObject<ClientData>(auth);

但是,这不会产生任何结果。我认为问题可能是如何构造JSON字符串,即为对象定义的属性。

有人可以帮助我指出正确的方向吗?

由于

3 个答案:

答案 0 :(得分:3)

您拥有的数据是包含在另一个对象中的JSON数组。您需要创建一个辅助类,将ClientData作为列表放在该类中,然后对其进行反序列化。

包含您的列表的基类

public class ClientDataInformation 
{
    [JsonProperty("ClientData")]
    public List<ClientData> ClientList {get;set;}
}

<强>反序列化

var result = JsonConvert.DeserializeObject<ClientDataInformation>(auth);

答案 1 :(得分:0)

这可能会解决问题

private static clientFileName = "yourfile.dat";

public static async Task<List<ClientData>> LoadClientDataFromJsonAsync()
    {
        string clientJsonString = await DeserializeClientDataAsync(clientFileName);
        if (clientJsonString != null)
            return (List<ClientData>)JsonConvert.DeserializeObject(clientJsonString, typeof(List<ClientData>));
        return null;
    }

private static async Task<ClientData> DeserializeClientDataAsync(string fileName)
    {
        try
        {
            StorageFile localFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
            return await FileIO.ReadTextAsync(localFile);
        }
        catch (FileNotFoundException)
        {
            return null;
        }

答案 2 :(得分:-1)

看起来您的客户端数据已设置为数组。删除括号,看看是否有效。另外,你把它包装在另一个类中。如果您需要基于Preface的ClientData,您需要某种类,如:

public class ClientDataObject
{
    public ClientData ClientData { get; set; }
}