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

标签 c# json serialization

我一直在尝试将 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;
}

可悲的是,如果我使用最后一个代码,字典每个(字符串键)月(listadoMeses 的每次迭代)都有一个项目,但是 Mes 类的每个实例都具有两个属性

最后一节课怎么办?

我用来反序列化的代码如下(但我想这些信息是无用的,因为在两种情况下都是相同的):

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 类上的属性是私有(private)的。将 public 访问修饰符添加到属性。

改成这样:

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

关于c# - 如何反序列化此 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533428/

相关文章:

c# - Visual Studio 中设置缩进样式的位置?

c# - 如何在运行时在 vb.net 窗口窗体中更改 TableLayoutPanel 控件中控件的位置

json - f# 类构造函数格式

数据结构的 C++ 序列化

c# - 移动站点检测

c# - 使用 ASP.NET Identity 3.x 删除用户的操作方法

c# - 为什么我不能在 C# 中将 json 字符串发送到服务器?

C# 在使用 Json.NET 读取 JSON 内容时保留转义序列

java - 为什么我应该在 java 中使用序列化而不是文件 I/O

c# - 反序列化向后兼容性