Aquí es una clase simple que armó desde varios mensajes .... Se ha probado durante aproximadamente 15 minutos, pero parece para trabajo para mis propósitos Utiliza JavascriptSerializer
para hacer el trabajo, al que se puede hacer referencia en tu aplicación usando la información detallada in this post.
El código siguiente se puede ejecutar en LINQPad para probarlo por:
- Al hacer clic derecho en la pestaña de script en LINQPad, y seleccionando "Propiedades" de consulta
- referencia a la "System.Web. Extensions.dll "en" Referencias adicionales "
- Agregar una" Importación de espacio de nombre adicional "de " System.Web.Script.Serialization ".
Espero que ayude!
void Main()
{
string json = @"
{
'glossary':
{
'title': 'example glossary',
'GlossDiv':
{
'title': 'S',
'GlossList':
{
'GlossEntry':
{
'ID': 'SGML',
'ItemNumber': 2,
'SortAs': 'SGML',
'GlossTerm': 'Standard Generalized Markup Language',
'Acronym': 'SGML',
'Abbrev': 'ISO 8879:1986',
'GlossDef':
{
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
},
'GlossSee': 'markup'
}
}
}
}
}
";
var d = new JsonDeserializer(json);
d.GetString("glossary.title").Dump();
d.GetString("glossary.GlossDiv.title").Dump();
d.GetString("glossary.GlossDiv.GlossList.GlossEntry.ID").Dump();
d.GetInt("glossary.GlossDiv.GlossList.GlossEntry.ItemNumber").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso").Dump();
d.GetObject("Some Path That Doesnt Exist.Or.Another").Dump();
}
// Define other methods and classes here
public class JsonDeserializer
{
private IDictionary<string, object> jsonData { get; set; }
public JsonDeserializer(string json)
{
var json_serializer = new JavaScriptSerializer();
jsonData = (IDictionary<string, object>)json_serializer.DeserializeObject(json);
}
public string GetString(string path)
{
return (string) GetObject(path);
}
public int? GetInt(string path)
{
int? result = null;
object o = GetObject(path);
if (o == null)
{
return result;
}
if (o is string)
{
result = Int32.Parse((string)o);
}
else
{
result = (Int32) o;
}
return result;
}
public object GetObject(string path)
{
object result = null;
var curr = jsonData;
var paths = path.Split('.');
var pathCount = paths.Count();
try
{
for (int i = 0; i < pathCount; i++)
{
var key = paths[i];
if (i == (pathCount - 1))
{
result = curr[key];
}
else
{
curr = (IDictionary<string, object>)curr[key];
}
}
}
catch
{
// Probably means an invalid path (ie object doesn't exist)
}
return result;
}
}
@ Greg: En realidad recomienda el JavaScriptSerializer' más de MS versión 'ya que no se acepte cualquier otra cosa que el formato JSON personalizado de WCF (por ejemplo, los campos de fecha que parecen fechas pero no están rodeados en DATE() fallan miserablemente) –
Además, mire esto [Análisis de objetos JSON con JavascriptSerializer en .NET] (http: // www) .tomasvera.com/programación/using-javascriptserializer-to-parse-json-objects /) artículo, que en realidad es un gran tutorial. – scatmoi
¿Dónde obtiene JavaScriptSerializer? No se reconoce en mi proyecto C# .NET 3.5. –