如何将Json字符串转换为C#类对象?

3

我在控制器中收到了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。

如何将此字符串转换为列表对象?


以非常简单的方式:http://json2csharp.com/ - Paolo Costa
但我不想要对象,我想要带有值的类...使用json2charp可以实现吗?@PaoloCosta - user1505984
网站提供了类定义,然后您需要编写代码来反序列化JSON字符串。 - Paolo Costa
我已经添加了一个反序列化到特定类的答案。 - Praveen Paulose
为什么不将“PersonDetail”对象集合作为函数输入参数呢? - Shaunak D
显示剩余2条评论
2个回答

3
错误出现是因为您试图将一个集合反序列化为对象。而且您正在使用通用的Object。您需要使用正确的泛型类型。
List<PersonDetail> personDetails = objJavascript.Deserialize<List<PersonDetail>>(jsn);

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

是的,我已经注意到了...并且修复了。谢谢你的信息。 - user1505984

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接