使用JavaScriptSerializer

时间:2015-06-14 21:41:14

标签: c# javascriptserializer

有人可以告诉我该怎么做吗?

我在c#中有这个功能:

public string ConvertLocationTableToString()
{
    int radius = 0;
    string locationType = "marker";

    DataTable dt = new DataTable();
    Using (SqlConnection con = new     SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
    {
        Using (SqlCommand cmd = new SqlCommand("SELECT  lat=Latitude, lng=Longitude,    FROM  Locations", con))
        {
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            Dictionary<string, object> row;

            foreach (DataRow dr in dt.Rows)
            {
                row = new Dictionary<string, object>();
                foreach (DataColumn col in dt.Columns)
                {
                    row.Add(col.ColumnName, dr[col]);
                }
                rows.Add(row);
            }
            return serializer.Serialize(rows);
        }
    }
}

地理位置包含两行纬度 lontitude 值。

  

它产生的字符串值为:

     

[{&#34; LAT&#34;:24.816925048828125,&#34; LNG&#34;: - 107.37641906738281}   ,{&#34; lat&#34;:24.815664291381836,&#34; lng&#34;: - 107.38169097900391}]

  

但我希望产生以下内容:

     

[{&#34; Coordinates&#34;:[{&#34; lat&#34;:24.816925048828125,&#34; lng&#34;: - 107.37641906738281}],&#34; Radius&#34;: 0,&#34; LocationType&#34;:&#34; marker&#34;}   ,{&#34; Coordinates&#34;:[{lat&#34;:24.815664291381836,&#34; lng&#34;: - 107.38169097900391}],&#34; Radius&#34;:0,&#34; LocationType& #34;:&#34;标记&#34;}}]

请注意,“Radius”和“LocationType”不是表格中的字段。

感谢您的帮助。

rubenc

1 个答案:

答案 0 :(得分:0)

您正在序列化从表中返回的行。如果您在C#中创建了一个与您想要的输出匹配的对象,然后循环返回的行并设置相关项,则可以将其序列化。

在您的情况下,对象将包括:   - 坐标 - 某种类型的列表   - Radius - int我假设   - LocationType - 猜测枚举

然后你将创建这些的arrray,并序列化数组。