使用 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 可以访问属性。