Saltar al contenido

Json.NET JsonConvert.DeserializeObject() volver null valor

Esta pregunta se puede resolver de variadas maneras, por lo tanto te enseñamos la que en nuestra opinión es la respuesta más completa.

Solución:

Olvidé hacer públicas las propiedades. No olvides hacer eso…

Con el interés de ayudar a otros que puedan estar experimentando este problema, o uno relacionado con él…

En mi caso, tenía un objeto con un array de otros objetos, y una de las propiedades de tipo de referencia en esos subobjetos siempre fue null después de la deserialización. Intenté todo tipo de cosas, incluida la descarga del JSON.Net fuente y recorriéndola para encontrar el punto de falla.

Para abreviar la historia, el problema era, por supuesto, mío. Aquí hay una versión muy simplificada de mi JSON y clases.

JSON


    "$id": "1",
    "RowCount": 10,
    "Rows": [
        "$id": 2",
        "ItemId": "1",
        "ItemName": "Some Item",
        "Owner": 
            "Name": "John Doe",
            "Id": "711D04F5-586F-4FD4-8369-4C00B51DD86F",
            // other properties...
        ,
        "OwnerId": "711D04F5-586F-4FD4-8369-4C00B51DD86F"
    ,
    // more rows
    ]

Clases

public class Items

    public int RowCount  get; set; 
    public IEnumerable Rows  get; set; 


public class Item

    private string ownerId;

    public string ItemId  get; set; 
    public string ItemName  get; set; 
    public Person Owner  get; set; 
    public string OwnerId
    
        get  return this.ownerId; 
        set 
            if (value != this.ownerId)
            
                this.Owner = null;
            
            this.ownerId = value;
        
    


public class Person

    public string Name  get; set; 
    public string Id  get; set; 
    // other properties

Lo que estaba pasando es que, porque el Owner propiedad apareció en el JSON antes de la OwnerId propiedad, cuando la OwnerId se configuró la propiedad, el código de establecimiento determinó que el valor actual no era el mismo que el valor que se estaba configurando (ya que el valor actual era null), por lo que estableció el Owner propiedad a null.

Para solucionarlo, también compruebo el valor que se establece con la identificación del Owner objeto también, y salte la configuración Owner para null si son iguales.

Es cierto que la causa de mi problema puede no ser la misma para todos, pero esto es al menos una advertencia para verificar qué sucede cuando sus objetos se inicializan durante la deserialización.

No sé cómo estás tratando de deserializar, pero esto debería funcionar….

string json = ""Ad":"Type":"Request",         "IdAd":"[email protected]",         "Category":"cat",         "SubCategory":"subcat","Position":"Latitude":"38.255",              "Longitude":"1.2",              "Imei":"0123456789"";
var obj = JsonConvert.DeserializeObject(json);

public class Ad

    public string Type  get; set; 
    public string IdAd  get; set; 
    public string Category  get; set; 
    public string SubCategory  get; set; 


public class Position

    public string Latitude  get; set; 
    public string Longitude  get; set; 
    public string Imei  get; set; 


public class RootObject

    public Ad Ad  get; set; 
    public Position Position  get; set; 

Comentarios y valoraciones del tutorial

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *