2012-08-24 44 views
1

当我尝试序列化我的自定义数据集时出现此错误。 我做错了什么,狡猾它应该是简单的?序列化数据集vb.net错误

由于

错误 而序列化类型的对象“System.Globalization.CultureInfo”中检测到循环引用。

Dim serializer As New JavaScriptSerializer() 
      Dim arrayJson As String = serializer.Serialize(makeMYDataSET()) 

    Private Function makeMYDataSET() As DataSet 


     ' Two DataTables. 
     Dim table1 As DataTable = New DataTable("patients") 
     table1.Columns.Add("name") 
     'table1.Columns.Add("id") 
     table1.Rows.Add("sam") 
     table1.Rows.Add("mark") 
     table1.Rows.Add("hjhkhkh") 

     Dim table2 As DataTable = New DataTable("medications") 
     'table2.Columns.Add("id") 
     table2.Columns.Add("medication") 
     table2.Rows.Add("atenolol") 
     table2.Rows.Add("amoxicillin") 

     ' Create a DataSet. Put both tables in it. 
     Dim set1 As DataSet = New DataSet("office") 
     set1.Tables.Add(table1) 
     set1.Tables.Add(table2) 


     Return set1 

    End Function 

回答

1

无法在普通DataSet上使用JavaScriptSerializer


一种方法是将您DataSet为XML,或更好,将其转换为Dictionary第一。

可以使用此方法(例如,从CodeProject):

Function DataSetToJSON(ds As DataSet) As String 
    Dim dict = New Dictionary(Of String, Object) 

    For Each dt As DataTable In ds.Tables 
     Dim arr(dt.Rows.Count) As Object 

     For i = 0 To dt.Rows.Count - 1 
      arr(i) = dt.Rows(i).ItemArray 
     Next 

     dict.Add(dt.TableName, arr) 
    Next 

    Dim json = New JavaScriptSerializer 
    Return json.Serialize(dict) 
End Function 

DataSetToJSON(makeMYDataSET()) 

结果

{ “患者”:[[“SAM “],[” 标记 “],[” hjhkhkh “],空],” 药物“:[[ “阿替洛尔”],[“阿莫西林”],null]}

-1
DataSet somedataset; 
XmlSerializer s = new XmlSerializer(typeof(Dataset)); 
StringWriter sw = new StringWriter(); 
s.Serialize(sw, somedataset); 
string serialized = sw.ToString(); 

其C#我知道,但它的工作原理。
关于javascriptserialzer类,我以前没有使用它,但我认为它涉及到xmlserializer。