juan lopez
juan lopez

Reputation: 3

Converting JToken into a complex Object using ToObject

sorry for my bad english. But i need a little help with this method (ToObject)

I have this 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; }
        }
    }

I am currently using the Root one to save a Jtoken in there. But i cant save the data on the propieties from Root class.

For example:

var object= myJson.ToObject<Root>();

If i try to save data on the propiety Product from AProductType, i cant access there using using ToOject. I try someting like this

var object= myJson.ToObject<Root>().A_Product.A_ProductType.Product;

And dont work, object var become null. I need some way to save the data around this complex object saving then in the propietes from Root.

Really sorry for my english, Thanks!!!

Edit: Json file

{
  "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"
          }
        ]
      } 
}

Edit 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);
                }

When i try to save the product number on

 objetoRot.A_Product.A_ProductType.Product

It shows NullReference exception, i cant access to the propiety in the Root object

Upvotes: 0

Views: 1683

Answers (1)

Mason Wheeler
Mason Wheeler

Reputation: 84550

The deserializing code is working just fine. Your problem is that you're accessing objects that aren't there.

When you say Root objetoRot = new Root();, you are creating a new, empty Root. Its A_Product value will be null. A few lines down, you are saying objetoRot.A_Product.A_ProductType.Product = objeto.Product;. But you can't get objetoRot.A_Product.A_ProductType because there is no objetoRot.A_Product to access properties on.

Upvotes: 1

Related Questions