簡體   English   中英

如何反序列化此JSON字符串?

[英]How Can I Deserialize this JSON string?

我一直在嘗試將JSON對象deserilize到C#類。 我的JSON Objetc(當我從Request.InputStream中讀取它時)如下:

{  
   "accion":"Guardar",
   "ejercicio":"2017",
   "codigoPieza":"13",
   "solicitado":"61",
   "solicitante":"46",
   "listadoMeses":{  
      "Enero":{  
         "valor":"1",
         "almacenado":"false"
      },
      "Febrero":{  
         "valor":"",
         "almacenado":"true"
      },
      "Mayo":{  
         "valor":"2",
         "almacenado":"true"
      },
      "Agosto":{  
         "valor":"2",
         "almacenado":"true"
      },
      "Noviembre":{  
         "valor":"2",
         "almacenado":"true"
      }
   }
}

如果我有這個類,這正確反序列化:

public class RespuestaUsuario
{
        public string accion { get; set; }
        public string ejercicio { get; set; }
        public string codigoPieza { get; set; }
        public string solicitado { get; set; }
        public string solicitante { get; set; }
        public Dictionary<string, Dictionary<string, string>> listadoMeses { get; set; }
    }

但我想使用這個類:

public class RespuestaUsuario
{
    public string accion { get; set; }
    public string ejercicio { get; set; }
    public string codigoPieza { get; set; }
    public string solicitado { get; set; }
    public string solicitante { get; set; }
    public Dictionary<string, Mes> listadoMeses { get; set; }
}

public class Mes
{
    string valor;
    string almacenado;
}

遺憾的是,如果我使用最后一個代碼,字典每個(字符串鍵)月有一個項(listadoMeses的每次迭代),但Mes類的每個實例都具有NULL屬性。

我怎么能用最后的課程?

我用來反序列化的代碼如下(但是我想這個信息是沒用的,因為在兩種情況下都是相同的):

System.IO.Stream str = Request.InputStream;
str.Position = 0;
string datos = String.Empty;
using (StreamReader reader = new StreamReader(str, Encoding.UTF8))
{
    datos = reader.ReadToEnd();
}

JavaScriptSerializer serializador = new JavaScriptSerializer();
RespuestaUsuario respuesta = (RespuestaUsuario)serializador.Deserialize<RespuestaUsuario>(datos);

您在Mes類上的屬性是私有的。 公共訪問修飾符添加到屬性。

把它改成這個:

public class Mes
{
    public string valor;
    public string almacenado;
}

我不喜歡JavaScriptSerializer,我更喜歡使用newtonsoft的Json.net

這可以通過nu get獲得:

> Install-Package Newtonsoft.Json -Version 9.0.1

使用Newtonsoft.Json 你的課程應該是這樣的!

public class Enero
{
    public string valor { get; set; }
    public string almacenado { get; set; }
}

public class Febrero
{
    public string valor { get; set; }
    public string almacenado { get; set; }
}

public class Mayo
{
    public string valor { get; set; }
    public string almacenado { get; set; }
}

public class Agosto
{
    public string valor { get; set; }
    public string almacenado { get; set; }
}

public class Noviembre
{
    public string valor { get; set; }
    public string almacenado { get; set; }
}

public class ListadoMeses
{
    public Enero Enero { get; set; }
    public Febrero Febrero { get; set; }
    public Mayo Mayo { get; set; }
    public Agosto Agosto { get; set; }
    public Noviembre Noviembre { get; set; }
}

public class RootObject
{
    public string accion { get; set; }
    public string ejercicio { get; set; }
    public string codigoPieza { get; set; }
    public string solicitado { get; set; }
    public string solicitante { get; set; }
    public ListadoMeses listadoMeses { get; set; }
}

如何將json反序列化為對象。

RootObject result = JsonConvert.DeserializeObject<RootObject>(json);

這里有Dotnet Fiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM