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;