Actualmente estoy tratando de leer un documento JSON desde el servidor web (es un físico archivo json) y comprobar los cambios en contra de mi base de datos. En otras palabras, necesito sincronizar el documento json y la base de datos cada noche o así.

Para esto estoy usando JSON.NET, que creo que es el camino a seguir cuando se trabaja con JSON en C# (?) El .NETO de la plataforma es la versión 3.5.

Hasta ahora soy capaz de leer el documento y obtener valores a partir de ella.

Mi JSON se parece a esto:

{"members":[

{"member":
    {
        "id":"4282",
        "status":"1931",
        "aktiv":"1",
        "firmanavn":"firmname1",
        "firmaUrl":"www.firmsite.com",
        "firmaUrlAlternativ":"",
        "firmaSidstKontrolleretDato":"30-08-2010",
        "firmaGodkendelsesDato":"07-03-2002"
    }
},
{"member":
    {
        "id":"4283",
        "status":"1931",
        "aktiv":"1",
        "firmanavn":"firmname2",
        "firmaUrl":"www.firmsite.com",
        "firmaUrlAlternativ":"",
        "firmaSidstKontrolleretDato":"30-08-2010",
        "firmaGodkendelsesDato":"18-12-2000"
    }
}, .... and so on
]}

Y mi código de C# es como sigue:

using (TextReader reader = File.OpenText(Server.MapPath("~/members.json")))
    {
        JsonTextReader jsonreader = new JsonTextReader(reader);
        var o = JObject.ReadFrom(jsonreader);
        jsonreader.Close();
        JObject obj = JObject.Parse(o.ToString());

        JArray items = (JArray)obj["members"];
        var members = Member.GetAllAsList();

        JObject item;
        JToken token;

        List<string> currentIds = new List<string>();
        for (int i = 0; i < items.Count; i++)
        {
            item = (JObject)items[i];
            token = item.First;

            while (token != null)
            {
                //ltTest.Text += ((JProperty)token).Value["firmanavn"].ToString() + System.Environment.NewLine;
                currentIds.Add(((JProperty)token).Value["id"].ToString());
                token = token.Next;
            }
        }

        foreach (var member in members)
        {
            if (!currentIds.Contains(member.Id.ToString()))
            {
                ltTest.Text += member.Text;
            }
        }
    }

Así que, básicamente, hay tres escenarios ahora:

  • Una de los miembros se ha modificado la información en la base de datos: necesito encontrar el miembro en el documento JSON y actualizar los campos correspondientes

  • Un miembro ha sido eliminado de la base de datos: necesito encontrar el miembro en el documento JSON y eliminarlo.

  • Un miembro ha sido añadido a la base de datos: necesito agregar miembro para el documento JSON.

Así, es cualquiera que esté familiarizado con JSON.NET para dar un toque (o tal vez algún código, ejemplos?) sobre cómo lograr esto? Yo apenas lo hizo, de hecho, leer el documento json desde el servidor, para esto parece ser una batalla cuesta arriba para mí en este momento.

  • Te das cuenta de que usted puede serializar y deserializar a/desde el json de forma nativa, derecho? Su justo como la Serialización Xml. A partir de ahí, sólo estás trabajando con objetos .net. No extraña API para aprender.
InformationsquelleAutor bomortensen | 2011-09-13

2 Comentarios

  1. 2

    Json.net tiene una cosa que se llama Linq-to-JSON, que según el sitio web es:

    LINQ to JSON no es un proveedor de LINQ, sino más bien una API para trabajar con
    Objetos JSON. La API ha sido diseñado con LINQ en mente para habilitar
    la rápida creación y consulta de objetos JSON.

    Por lo que apoya la consulta LINQ que, no he utilizado Linq-to-JSON pero estoy seguro de que va a cumplir con todos los tres de sus requisitos.

    De referencia y cómo-tos por favor, siga los siguientes enlaces:
    http://james.newtonking.com/archive/2008/02/11/linq-to-json-beta.aspx
    http://james.newtonking.com/projects/json/help/

    • Hola Waqas, el linq-to-json fue lo que hizo el truco para mí! Muchísimas gracias 🙂 No estoy justo a la izquierda con un serializar/deserializar la pregunta que voy a hacer otro post sobre. Gracias de nuevo!
  2. 1

    Para cumplir con sus requisitos, sugiero los siguientes pasos:

    • Analizar su fuente de JSON en fácil de usar JSON Objeto, tal y como hizo
    • Con el fin de obtener su se cumplen los requisitos, la más sencilla es probablemente haciendo tabla a tabla de comparación de uso de SQL.
      • Crear una puesta en escena de las tablas para poner los datos en JSON en
      • Convertir los datos en JSON alimentación en formato Relacional. En su caso, es bastante sencillo de creación de tabla MEMBER con el 8 columnas

    Partir de ahí, emitir las consultas SQL que se corresponden con tres de los casos que es:

    • Una de los miembros se ha modificado la información en la base de datos: necesito encontrar el miembro en el documento JSON y actualizar los campos correspondientes

      Con el fin de hacer esto, se emitirá una Consulta SQL que comparar cada campo, utilice el conjunto de resultados de actualizar el JSON

    • Un miembro ha sido eliminado de la base de datos: necesito encontrar el miembro en el documento JSON y eliminarlo.

      Problema de una Consulta SQL de realizar una comparación entre el uso de NO EN el comparador de tablas originales en comparación con la Member tablas que acaba de crear. Desde aquí podrá obtener de la colección de los Identificadores del conjunto de resultados que puede utilizar para eliminar el correspondiente Objeto JSON

    • Un miembro ha sido añadido a la base de datos: necesito agregar miembro para el documento JSON.

      No a la inversa de los pasos anteriores. Se emitirá una Consulta SQL la comparación de los datos que está en la base de datos pero no en el Member tabla. Utilice el conjunto de resultados a añadir al Objeto JSON

    Al final del proceso, usted tendría el Objeto JSON que representa a la sincronización entre los dos

    • Hola momo, muchas gracias para usted minuciosa descripción – este sería sin duda ser el camino a seguir, pero se me olvidó (lo siento!) mencionar, que el sitio web se está ejecutando Umbraco donde consultar la base de datos es un gran nono, porque de todo el almacenamiento en caché y las relaciones. De todos modos, gracias de nuevo por tu tiempo 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here