【问题标题】:Unable to deserialize a JSON string generated by a JQuery plugin无法反序列化由 JQuery 插件生成的 JSON 字符串
【发布时间】:2015-08-08 15:39:20
【问题描述】:

我使用了一个让我的用户能够设计表单的 JQuery 插件。该设计以 JSON 字符串的形式保存在数据库中。此 JSON 字符串采用以下格式:

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

以下是用于反序列化此 JSON 字符串的 C# 类结构和代码:

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,而是以我之前提到的格式导出。

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

【问题讨论】:

  • 您将 field_options 作为列表。它不是。这是一个单一的对象。 [] 表示它是一个数组。由于它没有那个,它是一个单一的对象。
  • @dman2306 非常感谢。有效。添加它作为答案我会标记它。 :)

标签: javascript c# jquery json serialization


【解决方案1】:

根据你的 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.Net,您的代码将是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多