推进JSON反序列化> SQL插入

时间:2016-04-24 09:32:20

标签: c# json

我想将JSON值插入SQL数据库。它正在工作,但主对象中有一个对象,我似乎无法检索它。

这是我的JSON代码

{"items":[{"uid":"b003a6ad8ef543dfbebf3ea2d48a1c33","commStatus":"OK","gateway":{"serialNumber":"CA1331305311005","type":null,"uid":"6b8ca67f3eec46c1a94f535c57dd48a3","imei":"353567040903313","macAddress":null},"subscription":{"identifier":"8927000003268372315","state":"INVENTORY","mobileNumber":null,"networkIdentifier":"655103015669848","uid":"1ba23cc6f6bc4a26b42029e4d5b83d1f","ipAddress":"10.13.14.40","operator":"MTN"},"name":"220"},{"uid":"500ed42280594d5b9a3049db15b6e5c9","commStatus":"OK","gateway":{"serialNumber":"CA1301201391004","type":"GX400","uid":"515334dbf5154911aa019520508b8077","imei":"353567041609349","macAddress":"00:14:3E:11:48:0D"},"subscription":{"identifier":"8927000002300070259","state":"INVENTORY","mobileNumber":null,"networkIdentifier":"655103308678726","uid":"073f0fc7ece240e7807db5bc1538d9ef","ipAddress":"10.13.4.51","operator":"MTN"},"name":"4116"}],"count":380,"size":100,"offset":0}

所以我的第一个问题是,我必须删除{"items":,否则我不会获得任何值。

  1. 那么如何修改代码以包含{"items":
  2. 第二个问题是:网关是另一个对象,所以网关内的任何东西,我都无法接收这些值。我试图获取serialNumber的值,但它返回null。

    1. 所以我的第二个问题是如何在另一个对象中获取值
    2. 这是我的代码

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      using System.Runtime.Serialization;
      using System.Runtime.Serialization.Json;
      using System.IO;
      using System.Data.SqlClient;
      
      namespace EMS_AVMS_Retrieval
      {
          class Program
          {
          [DataContract]
          class items
          {
              [DataMember]
              public string uid { get; set; }
              [DataMember]
              public string commStatus { get; set; }
              [DataMember]
              public string serialNumber { get; set; }
          }
      
          //[DataContract]
          //public class Gateway
          //{
          //    [DataMember]
          //    public string serialNumber { get; set; }
          //}
          static void Main(string[] args)
          {
      
              string json = @"[{"items":[{"uid":"b003a6ad8ef543dfbebf3ea2d48a1c33","commStatus":"OK","gateway":{"serialNumber":"CA1331305311005","type":null,"uid":"6b8ca67f3eec46c1a94f535c57dd48a3","imei":"353567040903313","macAddress":null},"subscription":{"identifier":"8927000003268372315","state":"INVENTORY","mobileNumber":null,"networkIdentifier":"655103015669848","uid":"1ba23cc6f6bc4a26b42029e4d5b83d1f","ipAddress":"10.13.14.40","operator":"MTN"},"name":"220"},{"uid":"500ed42280594d5b9a3049db15b6e5c9","commStatus":"OK","gateway":{"serialNumber":"CA1301201391004","type":"GX400","uid":"515334dbf5154911aa019520508b8077","imei":"353567041609349","macAddress":"00:14:3E:11:48:0D"},"subscription":{"identifier":"8927000002300070259","state":"INVENTORY","mobileNumber":null,"networkIdentifier":"655103308678726","uid":"073f0fc7ece240e7807db5bc1538d9ef","ipAddress":"10.13.4.51","operator":"MTN"},"name":"4116"}],"count":380,"size":100,"offset":0}]";
      
              //Deserialize the data
              DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<items>));
              MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
              var obj = (List<items>)ser.ReadObject(stream);
      
              //Loop thrrouch values and save the details into database
              foreach (items p in obj)
              {
                  //Create SQL conection to your database here
                  using (SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["my    ConnectionString"].ConnectionString))
                  {
                      // Open your connection
                      try
                      {
                          cn.Open();
                      }
                      catch (Exception e)
                      {
                          Console.WriteLine(e.ToString());
                          Console.ReadLine();
                          Environment.Exit(0);
                      }
                      //Change the table name here
                      string sql = "INSERT INTO tempTableAVMSRetrievals (uid, commStatus, serialNumber, retrievalDate) VALUES (@uid, @commStatus, @serialNumber, @retrievalDate)";
                      // Create the Command and Parameter objects.
                      using (SqlCommand cmd = new SqlCommand(sql, cn))
                      {
                          //Loop through the and get of parameter values
                          cmd.CommandType = System.Data.CommandType.Text;
                          cmd.Parameters.AddWithValue("@uid", p.uid);
                          cmd.Parameters.AddWithValue("@commStatus", p.commStatus);
                          cmd.Parameters.AddWithValue("@serialNumber", "SN");
                          cmd.Parameters.AddWithValue("@retrievalDate", currentDate);
      
                          //Execute the query
                          try
                          {
                              cmd.ExecuteNonQuery();
                          }
                          catch(Exception e2)
                          {
                              Console.WriteLine(e2.ToString());
                              Console.ReadLine();
                              Environment.Exit(0);
                          }
      
      
                      }
                  }
              }
              Environment.Exit(0);
          }
      }
      }
      

0 个答案:

没有答案