如何将 Json 字符串转换为 c# Class 对象?

How to convert Json string to c# Class object?

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

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"}]`

我的class:

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;
     }
}

我遇到了异常:

Unable to cast object of type System.Object[] to type WebApplication1.Models.PersonDetail.

如何将这个字符串放入列表对象中?

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

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

你有两个问题。 @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);