Newtonsoft JSON DeserializeObject 序列化对象的反序列化
Newtonsoft JSON DeserializeObject Deserialization of Serialized object
我返回了以下 JSON 字符串,我正在尝试反序列化,但我在填充对象属性值时遇到问题。
这是返回的 JSON 字符串:
"{\"ClientData\":[{\"clientID\":9999999,\"userID\":123,\"authID\":\"8a20627be9ec4c608f4c609a24e74174\"}]}"
现在,我通过以下方式指定了我的 ClientData class:
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 字符串的构造方式,即为对象定义的属性。
有人可以帮我指明正确的方向吗?
谢谢
您的客户端数据似乎设置为数组。拆下括号,看看是否可行。此外,您将它包裹在另一个 class 中。如果您需要前面的 ClientData,则需要某种 class,例如:
public class ClientDataObject
{
public ClientData ClientData { get; set; }
}
这可能会解决问题
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;
}
您拥有的数据是一个包裹在另一个对象中的 JSON 数组。您需要创建一个辅助 class,将您的 ClientData
作为列表放入其中并反序列化它。
包含您的列表的基础 class
public class ClientDataInformation
{
[JsonProperty("ClientData")]
public List<ClientData> ClientList {get;set;}
}
反序列化
var result = JsonConvert.DeserializeObject<ClientDataInformation>(auth);
我返回了以下 JSON 字符串,我正在尝试反序列化,但我在填充对象属性值时遇到问题。
这是返回的 JSON 字符串:
"{\"ClientData\":[{\"clientID\":9999999,\"userID\":123,\"authID\":\"8a20627be9ec4c608f4c609a24e74174\"}]}"
现在,我通过以下方式指定了我的 ClientData class:
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 字符串的构造方式,即为对象定义的属性。
有人可以帮我指明正确的方向吗?
谢谢
您的客户端数据似乎设置为数组。拆下括号,看看是否可行。此外,您将它包裹在另一个 class 中。如果您需要前面的 ClientData,则需要某种 class,例如:
public class ClientDataObject
{
public ClientData ClientData { get; set; }
}
这可能会解决问题
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;
}
您拥有的数据是一个包裹在另一个对象中的 JSON 数组。您需要创建一个辅助 class,将您的 ClientData
作为列表放入其中并反序列化它。
包含您的列表的基础 class
public class ClientDataInformation
{
[JsonProperty("ClientData")]
public List<ClientData> ClientList {get;set;}
}
反序列化
var result = JsonConvert.DeserializeObject<ClientDataInformation>(auth);