繁体   English   中英

C# .net 反序列化 JSON

[英]C# .net deserializing JSON

我正在尝试在我的对象中反序列化 JSON:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class FormData
{
    public string audience { get; set; }
    public Calendar[] calendar { get; set; }

    public FormData()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public class Calendar
    {
        public Quarter quarter { get; set; }
    }

    public class Quarter
    {
        public int qtrNumber { get; set; }
        public string qtrString { get; set; }
        public int[] qtrTools { get; set; }
        public int qtrYear { get; set; }
    }
}

这是我的处理程序:

<%@ WebHandler Language="C#" Class="ToolHandler" %>

using System;
using System.Web;
using System.Web.Script.Serialization;
using System.Text;
using System.IO;


public class ToolHandler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        HttpRequest Request = context.Request;
        HttpResponse Response = context.Response;

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        Response.ContentType = "text/plain";
        try
        {
            string strJson = new StreamReader(Request.InputStream).ReadToEnd();

            //deserialize the object
            FormData formData = serializer.Deserialize<FormData>(strJson);
            if (formData != null)
            {
                Response.Write("Success!!");
            }
            else
            {
                Response.Write("No Data");
            }
        }
        catch (Exception ex)
        {
            Response.Write("Error :" + ex.Message);
        }
    }
    public bool IsReusable {
        get {
            return false;
        }
    }

}

JSON:

{
    "audience": "8",
    "calendar": [
        {
            "qtrNumber": 1,
            "qtrYear": 2016,
            "qtrString": "1st Quarter",
            "qtrTools": [
                "3",
                "4"
            ]
        },
        {
            "qtrNumber": 2,
            "qtrYear": 2016,
            "qtrString": "2nd Quarter",
            "qtrTools": []
        },
        {
            "qtrNumber": 3,
            "qtrYear": 2016,
            "qtrString": "3rd Quarter",
            "qtrTools": []
        },
        {
            "qtrNumber": 4,
            "qtrYear": 2016,
            "qtrString": "4th Quarter",
            "qtrTools": []
        }
    ]
}

执行此行后我看到的内容:

FormData formData = serializer.Deserialize<FormData>(strJson);

formData 对象具有包含 4 个元素的数组的适当受众和日历,但所有 calendar[].quarter 对象都为 null。 请帮忙 ))

Calendar类在 JSON 中没有嵌套的Quarter属性。 您可以“取消嵌套”嵌套属性,一切都应该正常工作:

public class FormData
{
    public string audience { get; set; }
    public Calendar[] calendar { get; set; }

    public FormData()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public class Calendar
    {
        public int qtrNumber { get; set; }
        public string qtrString { get; set; }
        public int[] qtrTools { get; set; }
        public int qtrYear { get; set; }
    }
}

示例: https : //dotnetfiddle.net/mq1wyP

“qtr”属性都没有在calendar ,它们在Quarter 您的 JSON 必须是:

{
    "audience": "8",
    "calendar": [ {"Quarter" :
        {
            "qtrNumber": 1,
            "qtrYear": 2016,
            "qtrString": "1st Quarter",
            "qtrTools": [
                "3",
                "4"
            ]
        }},
        {"Quarter" : { 
            "qtrNumber": 2,
            "qtrYear": 2016,
            "qtrString": "2nd Quarter",
            "qtrTools": []
        }},
        etc...
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM