无法反序列化JQuery插件生成的JSON字符串

本文关键字:JSON 字符串 插件 反序列化 JQuery | 更新日期: 2023-09-27 18:07:04

我使用JQuery插件让我的用户设计表单。设计以JSON字符串的形式保存在数据库中。这个JSON字符串的格式如下:

{
    "fields": [{
        "label": "Untitled",
        "field_type": "text",
        "required": true,
        "field_options": {
            "save_to": "",
            "size": "small",
            "description": ""
        },
        "cid": "c5"
    }]
}

下面是c#的类结构和代码,用来反序列化这个JSON字符串:

public class Options {
    public string label {
        get;
        set;
    }
    public bool Checked {
        get;
        set;
    }
}
public class FieldOption {
    public string save_to {
        get;
        set;
    }
    public string description {
        get;
        set;
    }
    public object options {
        get;
        set;
    }
    public bool include_other_option {
        get;
        set;
    }
    public string size {
        get;
        set;
    }
}
public class DesignField {
    public string label {
        get;
        set;
    }
    public string field_type {
        get;
        set;
    }
    public bool required {
        get;
        set;
    }
    public string cid {
        get;
        set;
    }
    public List < FieldOption > field_options {
        get;
        set;
    }
}
public class Design {
    public List < DesignField > fields {
        get;
        set;
    }
}
public partial class FormDesign: System.Web.UI.UserControl {
    List < DesignField > FormFields;
    public string FormDesignData {
        get;
        set;
    }
    protected void Page_Load(object sender, EventArgs e) {
        Design res = JsonHelper.JsonDeserialize < Design > (FormDesignData);
         }
}

JSON Helper类在这里给出:http://www.codeproject.com/Articles/272335/JSON-Serialization-and-Deserialization-in-ASP-NET

问题是当内部JSON对象被[]包围时,它是反序列化的,例如:

"field_options":[{
            "save_to": "",
            "size": "small",
            "description": ""
        }]

但是这个插件不是用那个格式导出JSON,而是用我之前提到的格式。

请告诉我如何将其转换为有效的可反序列化格式?

无法反序列化JQuery插件生成的JSON字符串

根据你的json模型应该是:

public class FieldOptions
{
    public string save_to { get; set; }
    public string size { get; set; }
    public string description { get; set; }
}
public class Field
{
    public string label { get; set; }
    public string field_type { get; set; }
    public bool required { get; set; }
    public FieldOptions field_options { get; set; }
    public string cid { get; set; }
}
public class RootObject
{
    public List<Field> fields { get; set; }
}

我使用这个在线工具http://json2csharp.com/生成它。

RootObject是你将用来反序列化

的类型

使用,例如Json。,你的代码应该是

var myobj = JsonConvert.DeserializeObject<RootObject>(json);