JSON删除特殊字符

时间:2011-12-05 11:19:28

标签: android wcf json

我想在Android sqlite和amp;之间进行复制。 MS SQL server.That Time我想从Databse获取Tables值。

这是我的JSON

     {
   "Table1":[
      {
         "BusinessUnit":"MASS",
         "ProductCode":"SLD0201",
         "Description":"Lou Difan C.Blue 12"3- Commode",
         "Description2":"301 0201"

      },


      {
         "BusinessUnit":"MASS",
         "ProductCode":"SLN0502",
         "Description":"Lou Napoli I"vory- Cistern",
         "Description2":"2011 0502"

      },

      {
         "BusinessUnit":"MASS",
         "ProductCode":"LDMBL6H",
         "Description":"Dortek Taper Bullet Handle 6"5 serr ",
         "Description2":"Taper Bullet Ha"

      }

   ],
   "Table2":[
      {
         "chk":6,
         "currentchk":1
      }
   ]
}

在这里JSON描述列值包含"(双引号)。如果我们检查http://jsonformatter.curiousconcept.com/,它会显示错误。它是一个无效的JSON。

WCF服务我已将DataSet转换为JSON。某些表格列包含特殊章程。

我这样转换了:

       public String ConverTableToJson(DataSet dsDownloadJson,int currentSplit)
    {
        StringBuilder Sb = new StringBuilder();
        String result = "";
        int start = 0;
        int end =500;
        int chk = 0;
        int currentChk = currentSplit;
        if (dsDownloadJson.Tables.Count > 0)
        {
            Sb.Append("{");
            foreach (DataTable dt in dsDownloadJson.Tables)
            {
                DataTable dtDownloadJson = dt;
                string[] StrDc = new string[dtDownloadJson.Columns.Count];
                string HeadStr = string.Empty;
                double total = dtDownloadJson.Rows.Count;
                Console.WriteLine("--1--" + dtDownloadJson.Rows.Count);
                if (dtDownloadJson.Rows.Count < 500)
                {
                    end = dtDownloadJson.Rows.Count;
                }

                if (chk == 0)
                {
                    if (dtDownloadJson.Rows.Count > 500)
                    {
                        if ((dtDownloadJson.Rows.Count / 500) == 0)
                        {
                            chk = dtDownloadJson.Rows.Count / 500;
                        }
                        else
                        {
                            chk = dtDownloadJson.Rows.Count / 500 + 1;
                        }
                    }
                    else
                    {
                        chk = 1;
                    }
                    currentChk = 1;
                }
                else
                {
                    currentChk = currentChk + 1;
                    start = currentChk * 500;
                    end = start + 500;
                    currentChk = chk;
                }
                Sb.Append("\"" + dtDownloadJson.TableName + "1\" : [");

                if (dtDownloadJson.Rows.Count > 0)
                {
                    for (int i = 0; i < dtDownloadJson.Columns.Count; i++)
                    {
                        StrDc[i] = dtDownloadJson.Columns[i].Caption;
                        HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
                    }

                    if (HeadStr.Length > 0)
                    {
                        HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
                        Console.WriteLine("--2--" + start);
                        Console.WriteLine("--3--" + end);
                        for (int i = start; i < end; i++)
                        {

                            string TempStr = HeadStr;
                            Sb.Append("{");
                            for (int j = 0; j < dtDownloadJson.Columns.Count; j++)
                            {
                                TempStr = TempStr.Replace(dtDownloadJson.Columns[j] + j.ToString() + "¾", dtDownloadJson.Rows[i][j].ToString());
                                TempStr = TempStr.Replace(""", '\"');
                            }

                            Sb.Append(TempStr + "},");
                        }

                        Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
                    }

                }
                else
                {

                }
                Sb.Append("],");
                if (chk > 1)
                {
                    Sb.Append("\"Table2\": [{\"chk\": " + chk + ", \"currentchk\": " + currentChk + " }]");
                }
                else
                {
                    Sb.Append("\"Table2\": [{\"chk\": " + chk + ", \"currentchk\": " + currentChk + " }]");
                }


            }
           // Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
            Sb.Append("}");
            return Sb.ToString(); 
        }
        else
        {
            return "0";
        }
    }

我的问题是删除特殊章程或如何允许特殊字符。?

请帮助我任何人......

2 个答案:

答案 0 :(得分:2)

您不应该使用StringBuilder将对象转换为JSON字符串。使用JayRock JSON库中的JsonConverter类,它会为您完成序列化/反序列化Json(包括转义)

答案 1 :(得分:1)

尝试使用内置的json序列化

public static string Serialize<T>(T obj)

    {
        System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new

        System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
        MemoryStream ms = new MemoryStream();
        serializer.WriteObject(ms, obj);
        string retVal = Encoding.Default.GetString(ms.ToArray());
        ms.Dispose();
        return retVal;

    }