c# - 如何反序列化列表中的 JSON 数组 (C#)

标签 c# json deserialization

我正在努力解决这个论坛中有很多变体的主题,但我似乎找不到适合我的主题,我认为这是因为我的 JSON 数组的方式:( 我不是专家,但我已经“几乎”得到了结局...... 我需要掌握“成功”和“状态”值。而且还有不同的“地址”。

我的 JSON(称为responseFromServer):

{
  "success":true,
  "addresses":
  [
   {"DPID":658584,"SourceDesc":"Postal\\Physical","FullAddress":"1/8 Jonas Street, Waimataitai, Timaru 7910"},
   {"DPID":658585,"SourceDesc":"Postal\\Physical","FullAddress":"2/8 Jonas Street, Waimataitai, Timaru 7910"},
   {"DPID":658583,"SourceDesc":"Postal\\Physical","FullAddress":"3/8 Jonas Street, Waimataitai, Timaru 7910"}
  ],
 "status":"success"
}

然后,根据本论坛中的大量示例,我创建了我的类(class):

public class jsonDataTable
{
    public bool success { get; set; }
    public IEnumerable<dtaddresses> addresses { get; set; }
    public string status { get; set; }
}

public class dtaddresses 
{
    public int DPID { get; set; }
    public string SourceDesc { get; set; }
    public string FullAddress { get; set; }
}

然后我要反序列化:

public void _form_OnCallingAction(object sender, ActionEventArgs e)
{
 ...
 ...
 JavaScriptSerializer js = new JavaScriptSerializer();
 jsonDataTable jsonArray = js.Deserialize<jsonDataTable>(responseFromServer);
 ...
 string tb = jsonArray.status.ToString();
 string tb2 = jsonArray.success.ToString();
 ...
 ...
 List<dtaddresses> _listAddresses = new List<dtaddresses>
 {
  new dtaddresses()
 };
 ...
 ...
 try
 {
  string tb3 = _listAddresses.Count.ToString();
  string tb4 = _listAddresses[0].FullAddress;
 }
 catch (Exception ex)
 {
  CurrentContext.Message.Display(ex.Message + ex.StackTrace);
 }
...
...
...
 CurrentContext.Message.Display("Raw Response from server is: {0}", responseFromServer);
 //Returns all the content in a string to check. OK! :)

 CurrentContext.Message.Display("The success value is: {0} ", tb);
 //Returns the Status Value (in this case "success")  OK! :)

 CurrentContext.Message.Display("The status value is: {0} ", tb2);
 //Returns the Success Value (in this case "true")  giggity giggity! All Right! :)

 CurrentContext.Message.Display("The n. of addresses is: {0} ", tb3);
 //Returns how many addresses ( in this case is returning 0) not ok... :(

 CurrentContext.Message.Display("The address value is: {0} ", tb4);
 // Returns the Fulladdress in index 0 (in this case nothing...) not ok... :(

任何人都可以帮助我理解为什么我可以访问“dtaddresses”类中的值吗? 这就是我走了多远...

最佳答案

我从您的问题中复制的以下代码是创建一个与您的反序列化数据无关的全新列表。因此,它始终是单个元素列表,其中第一个元素仅包含默认值,这就是您稍后在 tb3tb4 中看到的内容。

List<dtaddresses> _listAddresses = new List<dtaddresses>
{
 new dtaddresses()
};

相反,将 jsonArray.addresses 分配给 _listAddresses,例如:

List<dtaddresses> _listAddresses = jsonArray.addresses.ToList() 

或者你可以完全忘记_listAddresses,直接引用jsonArray.addresses,例如:

string tb3 = jsonArray.addresses.Count().ToString();
string tb4 = jsonArray.addresses.First().FullAddress;

关于c# - 如何反序列化列表中的 JSON 数组 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578137/

相关文章:

java - 将对象列表序列化为java中的文件

c# - 我没有 SqlServerCe 程序集?

python - 使用 JSON 保存 Python 元组

json - gRPC 服务器可以作为另一个 gRPC 客户端的客户端吗?

java - Json 到具有 Class<?> 成员变量的 Java 对象

c# - BinaryWriter 和 BinaryFormatter.Serialize 之间的区别?

c# - 在 Windows 应用商店应用程序 WebView 中使用请求发布数据 - 使用 C#

c# - 如何使用 .NET 检测 Windows 64 位平台?

c# - 在 Mono - Linux 上使用 FileInfo 和 DirectoryInfo 类

java - Jackson MappingException 与 Websphere Application Server