2010-05-31 60 views
0

我在我的数据库表中存储多行文本框的值...当我转换此值,以JSON它给了我一个错误Error: unterminated string literal ...如何在json中处理这个字符串?

我的样本数据是,

Address Multiline textbox http://img249.imageshack.us/img249/9136/addressi.jpg

我获取行到我的数据表,然后将其转换成JSON,

public string GetJSONString(DataTable table) 
    { 
     StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); 
     for (int i = 0; i < table.Columns.Count; i++) 
     { 
      headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i); 
     } 
     headStrBuilder.Remove(headStrBuilder.Length - 1, 1);  
     StringBuilder sb = new StringBuilder(table.Rows.Count * 5); 
     sb.Append("{\""); 
     sb.Append(table.TableName); 
     sb.Append("\" : ["); 
     for (int i = 0; i < table.Rows.Count; i++) 
     { 
      string tempStr = headStrBuilder.ToString(); 
      sb.Append("{"); 
      for (int j = 0; j < table.Columns.Count; j++) 
      { 
       table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", ""); 
       tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString()); 
      } 
      sb.Append(tempStr + "},"); 
     } 
     sb.Remove(sb.Length - 1, 1); // trim last , 
     sb.Append("]}"); 
     return sb.ToString(); 
    } 

以上方法doen't似乎处理换行符...任何建议...

+5

为什么OH为什么你用手生成JSON?!?! – 2010-05-31 04:35:46

回答

2

JSON字符串不能包含文字换行符(ASCII 10)。它必须被编码为'\',然后'n'。正如Ignacio所说的,您应该使用许多JSON库中的一个。

JSON.NET有built-in support序列化DataTables和其他类型。

0

如果你wan't远离第三方库的时候,你也可以使用.NET内置串行

System.Web.Script.Serialization.JavaScriptSerializer

下面是一些代码,缺乏许多检查,将一个DataTable变成JSON

ArrayList list = new ArrayList(); 
      Dictionary<string, object> jsonOutput = new Dictionary<string, object>(); 

      foreach (DataRow row in table.Rows) 
      { 
       foreach (DataColumn col in row.Table.Columns) 
       { 
        if (row[col] == DBNull.Value) 
         jsonOutput.Add(col.ColumnName, ""); 
        else 
         jsonOutput.Add(col.ColumnName, row[col]); 
       } 

       list.Add(jsonOutput); 
       jsonOutput = new Dictionary<string, object>(); 
      } 


      System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer(); 
      return jss.Serialize(list);