使用Javascript序列化程序将数据表序列化为JSON时出错

本文关键字:序列化 JSON 出错 Javascript 程序 使用 数据表 | 更新日期: 2023-09-27 18:21:42

我有一个类,

public class Parameters
{
   public int Id {get;set;}
   public string FilterParam {get;set;}
   public string NameParam {get;set;}
   public IList<int> CollectionsIds {get;set;}
   public DataTable ParamTable {get;set;}
}

当我尝试序列化为JSON时,我得到了循环引用错误"序列化对象时检测到循环引用"。

我的序列化程序代码是:

JSONSerializer.SerializeObject<Parameters>(parameters)
private static JavaScriptSerializer _jsonSerializer = null;
private static JavaScriptSerializer JSONSerializer
{
    get
    {
        if (_jsonSerializer == null)
        {
            _jsonSerializer = new JavaScriptSerializer();
            _jsonSerializer.MaxJsonLength = 999999999;
        }
        return _jsonSerializer;
    }
}
public static string SerializeObject<T>(T obj)
{
    return JSONSerializer.Serialize(obj);
}

如果类也包含dataTable,我如何将该类序列化为JSON格式?

注意:若我将dataTable设置为null,它可以正常工作,但每当我尝试填充dataTable并调用方法进行序列化时,它都会失败。

使用Javascript序列化程序将数据表序列化为JSON时出错

只需在类中添加一个字段(字典列表)来伪造DataTable。并忽略DataTable成员。然后,您可以根据需要序列化此类的对象。

public class Parameters
{
    public int Id {get;set;}
    public string FilterParam {get;set;}
    public string NameParam {get;set;}
    public IList<int> CollectionsIds {get;set;}
    [ScriptIgnore]
    public DataTable ParamTable {get;set;}
    public List<Dictionary<string, object>> _fakeParamTable
    {
        get
        {
            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            Dictionary<string, object> row;
            foreach ( DataRow dr in ParamTable .Rows )
            {
                row = new Dictionary<string, object>();
                foreach ( DataColumn col in dt.Columns )
                {
                    row.Add(col.ColumnName, dr[col]);
                }
                rows.Add(row);
            }
            return rows;
        }
    }
}

使用此库:https://www.nuget.org/packages/newtonsoft.json/

此JSON:

{
 Parameters :
 {
   id: 1,
   FilterParam: "2",
   NameParam: "2",
   CollectionsIds: [1,2,3,1],
   ParamTable: {id:1,name:2,code:"3"}
 }
}

将上课(http://json2csharp.com/):

p

ublic class ParamTable
{
    public int id { get; set; }
    public int name { get; set; }
    public string code { get; set; }
}
public class Parameters
{
    public int id { get; set; }
    public string FilterParam { get; set; }
    public string NameParam { get; set; }
    public List<int> CollectionsIds { get; set; }
    public ParamTable ParamTable { get; set; }
}
public class RootObject
{
    public Parameters Parameters { get; set; }
}

所以你将啜饮序列化,你想要的是这样的:

JsonConvert.DeserializeObject<RootObject>(myJSON);