我有一个下面的代码,它使用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\"}]"
答案 0 :(得分:0)
答案 1 :(得分:0)
SO上有很多样本。 如果你只是想转换它字典,请看这里: How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?
但是,ASP.NET MVC中有一个内置机制,可以方便地将json param自动序列化为预定义对象。
答案 2 :(得分:0)
您可以定义一个类,其中包含dbname
和distance
等字段作为属性。然后,您可以使用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;
}
将对象列表作为类型参数传递