JSON.NET反序列化函数不返回值

时间:2013-05-23 01:02:35

标签: c# json json.net

我使用了JSON.NET DeserializeObject函数,但我没有得到任何值。它返回的全部是NULL!救命啊!

这是代码(实际上非​​常简单的代码!):

public class FMKey
{
    public string keyName { get; set; }
    public string keyValue { get; set; }
}
public partial class GetFMDetails : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string FMID = "{\"id\":\"22\"}";
        var FM = JsonConvert.DeserializeObject<FMKey>(FMID);

        Response.ContentType = "text/plain";
        Response.Write("Received: " + FM.keyName + " " + FM.keyValue);
    }
}

FM.keyName和FM.keyValue都包含NULL!我做错了什么?

2 个答案:

答案 0 :(得分:1)

您的JSON需要与您班级的定义相匹配。你会想要这样的东西:

string FMID = "{\"keyName\":\"id\",\"keyValue\":\"22\"}";
var FM = JsonConvert.DeserializeObject<FMKey>(FMID);

找出正确JSON的一种方法是构建一个对象,然后将其序列化。

var test = new FMKey() {keyName = "id", keyValue = "22"};
var result = JsonConvert.SerializeObject(test); // This will spit out the correct JSON

答案 1 :(得分:1)

您尝试反序列化的json与您尝试将其反序列化的对象的定义不匹配。如果你的对象只有一个字段 - id类型字符串,那么它就可以工作。

为了使用泛型方法反序列化,您需要为对象提供所有json属性可以映射到的字段。由于您的对象上没有id字段,因此失败。如果使用通用的反序列化方法,您会发现它创建了一个匿名对象,其属性类型为id