在C#上处理Stringfied值的值

时间:2014-04-09 09:31:39

标签: c# json

我有一个下面的代码,它使用JSON.stringify到对象然后在POST方法上传递它(请参阅下面的Javascript代码)。我使用C#在后端获取这些值。我的问题是,我怎么能转换/操纵/访问字符串化的值。请参阅下面的C#代码

使用Javascript:

var json_db = JSON.stringify(selectedDbInfo);
$.post("../FormActions/DatabaseChanges.aspx", { action: "savedb", orderNumber: orderNumber, selectedDb: json_db}, 
    function (response) {
        alert('ok');
    });

C#:

var dbValue = c.Request.Params["selectedDb"];
下面的

dbValue

的结果值
"[{\"dbname\":\"BASINS\",\"distance\":\"0\"},{\"dbname\":\"BROWNFIELD\",\"distance\":\"0.5\"},{\"dbname\":\"BRS\",\"distance\":\"0\"}]"

4 个答案:

答案 0 :(得分:0)

您需要将JSON解析为.NET数组或List。

许多人使用json.NET:http://james.newtonking.com/json

您可以使用一些字符串操作逐个填充对象,但我不建议这样做。

答案 1 :(得分:0)

SO上有很多样本。 如果你只是想转换它字典,请看这里: How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?

但是,ASP.NET MVC中有一个内置机制,可以方便地将json param自动序列化为预定义对象。

答案 2 :(得分:0)

您可以定义一个类,其中包含dbnamedistance等字段作为属性。然后,您可以使用NewtonSoft.Json将json字符串dbValue反序列化为该类型的列表。请参阅以下代码:

var list = JsonConvert.DeserializeObject<List<RootObject>>(dbValue);

foreach (var item in list)
{
    Console.WriteLine(string.Format("dbname: {0}, distance: {1}", item.dbname, item.distance));
}

Ans RootObject的定义就像你猜的那样简单:

public class RootObject
{
    public string dbname { get; set; }
    public string distance { get; set; }
}

答案 3 :(得分:0)

使用以下属性创建自定义可序列化数据协定类,例如DatabaseDistance

[DataMember(Name = "dbname")]
private string name;

[DataMember(Name = "distance")]
private double distance;

并使用以下方法进行反序列化:

public static T FromJSON<T>(string jsonValue, IEnumerable<Type> knownTypes)
            {
                //validate input parameters here

                T result = default(T);

                try
                {
                    using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(jsonValue)))
                    {                   
                        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T), knownTypes);
                        result = (T)serializer.ReadObject(stream);
                    }
                }
                catch (Exception exception)
                {
                    throw new Exception("An error occurred while deserializing", exception);
                }

                return result;
            }

将对象列表作为类型参数传递