Json.NET: 反序列化 Json 对象 returns 空 C# 对象
Json.NET: Deserializing Json object returns null C# object
我有这个 Json 对象:
{
"ComplementoCartaPorte": [
{
"RFCImportador": "IJD840224QD2",
"Pedimentos": [
{
"NumPedimento": "80034680000518",
"Referencia": "REFPEDIMENTO1IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000528",
"Referencia": "REFPEDIMENTO2A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "287d57c7-9132-4234-9268-28e984e7cdf1",
"PDF": "PD94",
"XML": "PD94"
}
},
{
"RFCImportador": "MJD960223MV9",
"Pedimentos": [
{
"NumPedimento": "80034680000519",
"Referencia": "REFPEDIMENTO3IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000520",
"Referencia": "REFPEDIMENTO4A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "587d57c7-9133-4234-9268-28e984e7cdg7",
"PDF": "AM92",
"XML": "AM92"
}
}
]
}
我尝试将其反序列化为此 class 的 C# 对象:
// Top level class
public class ComplementoCartaPorte
{
// Only one field, an array
public Complemento[] Complemento { get; set; }
}
// Array elements of "Complemento" field
public class Complemento
{
public string RFCImportador { get; set; }
// Array Field
public Pedimento[] Pedimentos { get; set; }
public Archivo Archivos { get; set; }
}
// Array elements of "Pedimentos" field
public class Pedimento
{
public string NumPedimento { get; set; }
public string Referencia { get; set; }
public int Remesa { get; set; }
}
public class Archivo
{
public string FolioFiscal { get; set; }
public string PDF { get; set; }
public int XML { get; set; }
}
我尝试像这样反序列化 (C#):
ComplementoCartaPorte comp = JsonConvert.DeserializeObject<ComplementoCartaPorte>(json_string);
“comp”结果对象的类型为“ComplementoCartaPorte”,但它只有一个 属性 类型为“Complemento”,为 null。我希望它是一组带有数据的“Complemento”对象。
有人可以解释一下吗?非常感谢。
使用 List < ComplementoCartaPorte > 代替 ComplementoCartaPorte
List<ComplementoCartaPorte> comp = JsonConvert
.DeserializeObject<Root>(json_string).ComplementoCartaPorte;
类
public class Pedimento
{
public string NumPedimento { get; set; }
public string Referencia { get; set; }
public int Remesa { get; set; }
}
public class Archivos
{
public string FolioFiscal { get; set; }
public string PDF { get; set; }
public string XML { get; set; }
}
public class ComplementoCartaPorte
{
public string RFCImportador { get; set; }
public List<Pedimento> Pedimentos { get; set; }
public Archivos Archivos { get; set; }
}
public class Root
{
public List<ComplementoCartaPorte> ComplementoCartaPorte { get; set; }
}
分解上面的 json 可能有助于了解在这种情况下发生这种情况的原因。
从 {}
开始,我们有一个未命名的对象。这是我们的包装器/根对象。
在该对象上我们有一个 属性、ComplementoCartaPorte
。
这个对象有一个对象数组,用 []
表示,里面有 {},{}
。
但是这个结构与我们现有的 classes 不一致。
ComplementoCartaPorte
有一个 属性,它是一个名为 Complemento
的数组 属性,包含 Complemento
个对象
如果我们希望将这些对象反序列化为 Complemento
,那么我们需要稍微调整 json。
{
"ComplementoCartaPorte": {
"Complemento": [
{
"RFCImportador": "IJD840224QD2",
"Pedimentos": [
{
"NumPedimento": "80034680000518",
"Referencia": "REFPEDIMENTO1IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000528",
"Referencia": "REFPEDIMENTO2A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "287d57c7-9132-4234-9268-28e984e7cdf1",
"PDF": "PD94",
"XML": "PD94"
}
},
{
"RFCImportador": "MJD960223MV9",
"Pedimentos": [
{
"NumPedimento": "80034680000519",
"Referencia": "REFPEDIMENTO3IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000520",
"Referencia": "REFPEDIMENTO4A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "587d57c7-9133-4234-9268-28e984e7cdg7",
"PDF": "AM92",
"XML": "AM92"
}
}
]
}
}
注意 ComplementoCartaPorte 对象的调整 属性 在打开 ComplementoCartaPorte
对象后为 Complemento
添加了 属性。
然后我们可以添加下面的class作为我们的包装器
public class Wrapper
{
public ComplementoCartaPorte ComplementoCartaPorte { get; set; }
}
Wrapper comp = JsonConvert.DeserializeObject<Wrapper>(json_string);
我有这个 Json 对象:
{
"ComplementoCartaPorte": [
{
"RFCImportador": "IJD840224QD2",
"Pedimentos": [
{
"NumPedimento": "80034680000518",
"Referencia": "REFPEDIMENTO1IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000528",
"Referencia": "REFPEDIMENTO2A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "287d57c7-9132-4234-9268-28e984e7cdf1",
"PDF": "PD94",
"XML": "PD94"
}
},
{
"RFCImportador": "MJD960223MV9",
"Pedimentos": [
{
"NumPedimento": "80034680000519",
"Referencia": "REFPEDIMENTO3IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000520",
"Referencia": "REFPEDIMENTO4A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "587d57c7-9133-4234-9268-28e984e7cdg7",
"PDF": "AM92",
"XML": "AM92"
}
}
]
}
我尝试将其反序列化为此 class 的 C# 对象:
// Top level class
public class ComplementoCartaPorte
{
// Only one field, an array
public Complemento[] Complemento { get; set; }
}
// Array elements of "Complemento" field
public class Complemento
{
public string RFCImportador { get; set; }
// Array Field
public Pedimento[] Pedimentos { get; set; }
public Archivo Archivos { get; set; }
}
// Array elements of "Pedimentos" field
public class Pedimento
{
public string NumPedimento { get; set; }
public string Referencia { get; set; }
public int Remesa { get; set; }
}
public class Archivo
{
public string FolioFiscal { get; set; }
public string PDF { get; set; }
public int XML { get; set; }
}
我尝试像这样反序列化 (C#):
ComplementoCartaPorte comp = JsonConvert.DeserializeObject<ComplementoCartaPorte>(json_string);
“comp”结果对象的类型为“ComplementoCartaPorte”,但它只有一个 属性 类型为“Complemento”,为 null。我希望它是一组带有数据的“Complemento”对象。
有人可以解释一下吗?非常感谢。
使用 List < ComplementoCartaPorte > 代替 ComplementoCartaPorte
List<ComplementoCartaPorte> comp = JsonConvert
.DeserializeObject<Root>(json_string).ComplementoCartaPorte;
类
public class Pedimento
{
public string NumPedimento { get; set; }
public string Referencia { get; set; }
public int Remesa { get; set; }
}
public class Archivos
{
public string FolioFiscal { get; set; }
public string PDF { get; set; }
public string XML { get; set; }
}
public class ComplementoCartaPorte
{
public string RFCImportador { get; set; }
public List<Pedimento> Pedimentos { get; set; }
public Archivos Archivos { get; set; }
}
public class Root
{
public List<ComplementoCartaPorte> ComplementoCartaPorte { get; set; }
}
分解上面的 json 可能有助于了解在这种情况下发生这种情况的原因。
从 {}
开始,我们有一个未命名的对象。这是我们的包装器/根对象。
在该对象上我们有一个 属性、ComplementoCartaPorte
。
这个对象有一个对象数组,用 []
表示,里面有 {},{}
。
但是这个结构与我们现有的 classes 不一致。
ComplementoCartaPorte
有一个 属性,它是一个名为 Complemento
的数组 属性,包含 Complemento
个对象
如果我们希望将这些对象反序列化为 Complemento
,那么我们需要稍微调整 json。
{
"ComplementoCartaPorte": {
"Complemento": [
{
"RFCImportador": "IJD840224QD2",
"Pedimentos": [
{
"NumPedimento": "80034680000518",
"Referencia": "REFPEDIMENTO1IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000528",
"Referencia": "REFPEDIMENTO2A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "287d57c7-9132-4234-9268-28e984e7cdf1",
"PDF": "PD94",
"XML": "PD94"
}
},
{
"RFCImportador": "MJD960223MV9",
"Pedimentos": [
{
"NumPedimento": "80034680000519",
"Referencia": "REFPEDIMENTO3IN",
"Remesa": 1
},
{
"NumPedimento": "80034680000520",
"Referencia": "REFPEDIMENTO4A1",
"Remesa": 0
}
],
"Archivos": {
"FolioFiscal": "587d57c7-9133-4234-9268-28e984e7cdg7",
"PDF": "AM92",
"XML": "AM92"
}
}
]
}
}
注意 ComplementoCartaPorte 对象的调整 属性 在打开 ComplementoCartaPorte
对象后为 Complemento
添加了 属性。
然后我们可以添加下面的class作为我们的包装器
public class Wrapper
{
public ComplementoCartaPorte ComplementoCartaPorte { get; set; }
}
Wrapper comp = JsonConvert.DeserializeObject<Wrapper>(json_string);