2015-08-08 2 views
0

Я использую плагин JQuery, который позволяет моим пользователям создавать формы. Конструкция сохраняется в виде строки JSON в базе данных. Это JSON строка в следующем формате:Невозможно десериализовать строку JSON, сгенерированную плагином JQuery

{ 
    "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 в этом формате, но в том формате, о котором я упоминал ранее.

Скажите, пожалуйста, как я могу преобразовать его в действительный десериализуемый формат?

+0

Вы field_options в виде списка. Это не. Это единственный объект. [] Будет означать, что это массив. Так как это не так, это единственный объект. – dman2306

+0

@ dman2306 большое спасибо. Это сработало. Добавьте его в качестве ответа. Я отметю его. :) –

ответ

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); 
Смежные вопросы