Agradeceríamos tu ayuda para extender nuestros tutoriales sobre las ciencias informáticas.
Solución:
Como otros ya han señalado, la razón por la que no está obteniendo los resultados esperados es porque su JSON no coincide con la estructura de clase en la que está tratando de deserializar. Debe cambiar su JSON o cambiar sus clases. Dado que otros ya han mostrado cómo cambiar el JSON, tomaré el enfoque opuesto aquí.
Para que coincida con el JSON que publicó en su pregunta, sus clases deben definirse como las siguientes. Observe que he realizado los siguientes cambios:
- agregué un
Wrapper
clase correspondiente al objeto externo en su JSON. - cambié el
Values
propiedad de laValueSet
clase de unList
a unDictionary
desde elvalues
propiedad en su JSON contiene un objeto, no un array. - Agregué algunos adicionales
[JsonProperty]
attributes para que coincida con los nombres de propiedad en sus objetos JSON.
Definiciones de clase:
class Wrapper
[JsonProperty("JsonValues")]
public ValueSet ValueSet get; set;
class ValueSet
[JsonProperty("id")]
public string Id get; set;
[JsonProperty("values")]
public Dictionary Values get; set;
class Value
[JsonProperty("id")]
public string Id get; set;
[JsonProperty("diaplayName")]
public string DisplayName get; set;
Necesita deserializar en el Wrapper
clase, no la ValueSet
clase. A continuación, puede obtener el ValueSet
desde el Wrapper
.
var valueSet = JsonConvert.DeserializeObject(jsonString).ValueSet;
Aquí hay un programa de trabajo para demostrar:
class Program
static void Main(string[] args)
string jsonString = @"
""JsonValues"":
""id"": ""MyID"",
""values"":
""value1"":
""id"": ""100"",
""diaplayName"": ""MyValue1""
,
""value2"":
""id"": ""200"",
""diaplayName"": ""MyValue2""
";
var valueSet = JsonConvert.DeserializeObject(jsonString).ValueSet;
Console.WriteLine("id: " + valueSet.Id);
foreach (KeyValuePair kvp in valueSet.Values)
Console.WriteLine(kvp.Key + " id: " + kvp.Value.Id);
Console.WriteLine(kvp.Key + " name: " + kvp.Value.DisplayName);
Y aquí está la salida:
id: MyID
value1 id: 100
value1 name: MyValue1
value2 id: 200
value2 name: MyValue2
http://json2csharp.com/
Encontré el enlace anterior increíblemente útil, ya que corrigió mis clases de C# al generarlas a partir del JSON que en realidad se devolvió.
Entonces llamé:
JsonConvert.DeserializeObject(jsonString);
y todo funcionó como se esperaba.
¿Comprobó que esta línea funciona perfectamente y su string tiene valor en ella?
string jsonString = sr.ReadToEnd();
en caso afirmativo, pruebe este código para la última línea:
ValueSet items = JsonConvert.DeserializeObject
o si tienes un array de json puedes usar una lista como esta:
List
>(jsonString);
buena suerte
Agradecemos que desees respaldar nuestro análisis añadiendo un comentario o dejando una puntuación te damos las gracias.