使用 ToObject 将 JToken 转换为复杂对象
Converting JToken into a complex Object using ToObject
抱歉我的英语不好。但是我需要一些关于此方法的帮助 (ToObject)
我有这个class
namespace Proyects
{
public class AProductType
{
public DateTime CreationDate { get; set; }
public string Product { get; set; }
}
public class AProduct
{
public AProductType A_ProductType { get; set; }
}
public class AProductPlantType
{
public string SerialNumberProfile { get; set; }
}
public class ToPlant
{
public List<AProductPlantType> A_ProductPlantType { get; set; }
}
public class AProductDescriptionType
{
public string Language { get; set; }
public string Product { get; set; }
public string ProductDescription { get; set; }
}
public class ToDescription
{
public List<AProductDescriptionType> A_ProductDescriptionType { get; set; }
}
public class Root
{
public AProduct A_Product { get; set; }
public ToPlant to_Plant { get; set; }
public ToDescription to_Description { get; set; }
}
}
我目前正在使用根目录在其中保存一个 Jtoken。但是我无法保存来自 Root class.
的属性数据
例如:
var object= myJson.ToObject<Root>();
如果我尝试从 AProductType 保存有关产品的数据,我无法使用 ToOject 访问那里。我尝试像这样
var object= myJson.ToObject<Root>().A_Product.A_ProductType.Product;
并且不起作用,对象变量变为空。我需要一些方法来保存这个复杂对象的数据,然后保存在 Root.
的属性中
真的很抱歉我的英语不好,谢谢!!!
编辑:Json 文件
{
"A_Product": {
"A_ProductType": {
"CreationDate": "2020-01-17T00:00:00",
"Product": "158"
}
},
"to_Plant": {
"A_ProductPlantType": [
{
"SerialNumberProfile": "E001"
}
]
},
"to_Description": {
"A_ProductDescriptionType": [
{
"Language": "EN",
"Product": "158",
"ProductDescription": "Terminal LaP (nro de serie + equipo)"
},
{
"Language": "ES",
"Product": "158",
"ProductDescription": "Terminal LaP"
}
]
}
}
编辑 2:
private static List<string> retrieveData(JObject ob, List<Root> listaObjetos)
{
List<string> ListaCodigoProducto = new List<string>();
Root objetoRot = new Root();
var A_Product = ob["A_Product"];
if (A_Product.HasValues)
{
var validacion = ob["A_Product"]["A_ProductType"];
if (validacion.Type == JTokenType.Object)
{
var objeto = validacion.ToObject<AProductType>();
ListaCodigoProducto.Add(objeto.Product);
objetoRot.A_Product.A_ProductType.Product = objeto.Product;
listaObjetos.Add(objetoRot);
}
当我尝试保存产品编号时
objetoRot.A_Product.A_ProductType.Product
它显示 NullReference 异常,我无法访问 Root 对象中的属性
反序列化代码工作正常。您的问题是您正在访问不存在的对象。
当您说 Root objetoRot = new Root();
时,您正在创建一个新的空 Root
。它的 A_Product
值将是 null
。几行之后,你说的是 objetoRot.A_Product.A_ProductType.Product = objeto.Product;
。但是你无法获得 objetoRot.A_Product.A_ProductType
因为没有 objetoRot.A_Product
可以访问属性。
抱歉我的英语不好。但是我需要一些关于此方法的帮助 (ToObject)
我有这个class
namespace Proyects
{
public class AProductType
{
public DateTime CreationDate { get; set; }
public string Product { get; set; }
}
public class AProduct
{
public AProductType A_ProductType { get; set; }
}
public class AProductPlantType
{
public string SerialNumberProfile { get; set; }
}
public class ToPlant
{
public List<AProductPlantType> A_ProductPlantType { get; set; }
}
public class AProductDescriptionType
{
public string Language { get; set; }
public string Product { get; set; }
public string ProductDescription { get; set; }
}
public class ToDescription
{
public List<AProductDescriptionType> A_ProductDescriptionType { get; set; }
}
public class Root
{
public AProduct A_Product { get; set; }
public ToPlant to_Plant { get; set; }
public ToDescription to_Description { get; set; }
}
}
我目前正在使用根目录在其中保存一个 Jtoken。但是我无法保存来自 Root class.
的属性数据例如:
var object= myJson.ToObject<Root>();
如果我尝试从 AProductType 保存有关产品的数据,我无法使用 ToOject 访问那里。我尝试像这样
var object= myJson.ToObject<Root>().A_Product.A_ProductType.Product;
并且不起作用,对象变量变为空。我需要一些方法来保存这个复杂对象的数据,然后保存在 Root.
的属性中真的很抱歉我的英语不好,谢谢!!!
编辑:Json 文件
{
"A_Product": {
"A_ProductType": {
"CreationDate": "2020-01-17T00:00:00",
"Product": "158"
}
},
"to_Plant": {
"A_ProductPlantType": [
{
"SerialNumberProfile": "E001"
}
]
},
"to_Description": {
"A_ProductDescriptionType": [
{
"Language": "EN",
"Product": "158",
"ProductDescription": "Terminal LaP (nro de serie + equipo)"
},
{
"Language": "ES",
"Product": "158",
"ProductDescription": "Terminal LaP"
}
]
}
}
编辑 2:
private static List<string> retrieveData(JObject ob, List<Root> listaObjetos)
{
List<string> ListaCodigoProducto = new List<string>();
Root objetoRot = new Root();
var A_Product = ob["A_Product"];
if (A_Product.HasValues)
{
var validacion = ob["A_Product"]["A_ProductType"];
if (validacion.Type == JTokenType.Object)
{
var objeto = validacion.ToObject<AProductType>();
ListaCodigoProducto.Add(objeto.Product);
objetoRot.A_Product.A_ProductType.Product = objeto.Product;
listaObjetos.Add(objetoRot);
}
当我尝试保存产品编号时
objetoRot.A_Product.A_ProductType.Product
它显示 NullReference 异常,我无法访问 Root 对象中的属性
反序列化代码工作正常。您的问题是您正在访问不存在的对象。
当您说 Root objetoRot = new Root();
时,您正在创建一个新的空 Root
。它的 A_Product
值将是 null
。几行之后,你说的是 objetoRot.A_Product.A_ProductType.Product = objeto.Product;
。但是你无法获得 objetoRot.A_Product.A_ProductType
因为没有 objetoRot.A_Product
可以访问属性。