【问题标题】:How to convert Json string to c# Class object?如何将 Json 字符串转换为 c# Class 对象?
【发布时间】:2015-07-12 09:00:01
【问题描述】:

我在 Controller 中收到了 json 字符串,现在我想将该字符串映射到 C# 类对象 我该怎么做?

JSON:

[{"PdID":null,"StName":"435","DOB":"2015-05-02T17:09:35.974Z","Gender":"5435"},{"PdID": null,"StName":"4343","DOB":"2015-05-02T17:09:35.974Z","Gender":"4345"}]`

我的班级:

public class PersonDetail
{
    public int PdID { get; set; }
    public int PolicyPurchesID { get; set; }
    public string StName { get; set; }
    public DateTime DOB { get; set; }
    public byte Gender { get; set; }
}

现在在我的控制器中我已经这样做了:-

public ActionResult PolicyDetailAdd(string jsn)
{
    try
    {               
        JavaScriptSerializer objJavascript = new JavaScriptSerializer();

        PersonDetail testModels = (PersonDetail)objJavascript.DeserializeObject(jsn);

        return null;
     }
}

我在这方面遇到了异常:

无法将 System.Object[] 类型的对象转换为 WebApplication1.Models.PersonDetail 类型。

我怎样才能把这个字符串放到列表对象中?

【问题讨论】:

  • 以一种非常简单的方式:json2csharp.com
  • 但我不想要对象我想要具有值的类...可以使用这个 json2charp @PaoloCosta
  • 网站给你类定义,而不是你必须编写代码来反序列化 json 字符串
  • 我添加了反序列化到特定类的答案。
  • 您可以将模型集合作为方法的参数,如果您发送正确的 json 对象,它将自动为您转换。没有理由您应该手动执行此操作。因此,只需将方法的签名更新为 public ActionResult PolicyDetailAdd(IEnumerable data) 即可。

标签: c# json model-view-controller


【解决方案1】:

你有两个问题。 @Praveen Paulose 关于第一个错误是正确的。但是对象定义相对于 JSON 也是不正确的。

首先,PdId需要处理null:

public class PersonDetail
    {
        public int? PdID { get; set; }
        public int PolicyPurchesID { get; set; }
        public string StName { get; set; }
        public System.DateTime DOB { get; set; }
        public byte Gender { get; set; }
    }

其次,正如@Praveen 提到的,JSON 正在返回一个数组,因此您需要处理它。

JavaScriptSerializer objJavascript = new JavaScriptSerializer();

var testModels = objJavascript.DeserializeObject<ICollection<PersonDetail>>(jsn);

【讨论】:

  • 是的,我注意到了...并解决了这个问题,谢谢您提供信息。
【解决方案2】:

发生错误是因为您试图将集合反序列化为对象。此外,您使用的是通用 Object。您将需要使用

List<PersonDetail> personDetails = objJavascript.Deserialize<List<PersonDetail>>(jsn);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2018-01-06
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多