我如何反序列化这个JSON字符串

本文关键字:JSON 字符串 反序列化 | 更新日期: 2023-09-27 18:17:23

我一直在尝试将JSON对象反序列化为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;
}

遗憾的是,如果我使用最后一个代码,字典中每个(string key)月份(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);

我如何反序列化这个JSON字符串

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到object.

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

Here Dotnet Fiddle