C# 在C上操纵字符串化值的值#
我有一个下面的代码,它使用JSON.stringify将对象传递给POST方法(请参见下面的Javascript代码)。我使用C#在后端获取这些值。我的问题是,如何转换/操作/访问字符串化的值。请参见下面的C#代码 Javascript:C# 在C上操纵字符串化值的值#,c#,json,C#,Json,我有一个下面的代码,它使用JSON.stringify将对象传递给POST方法(请参见下面的Javascript代码)。我使用C#在后端获取这些值。我的问题是,如何转换/操作/访问字符串化的值。请参见下面的C#代码 Javascript: var json_db = JSON.stringify(selectedDbInfo); $.post("../FormActions/DatabaseChanges.aspx", { action: "savedb", orderNumber: order
var json_db = JSON.stringify(selectedDbInfo);
$.post("../FormActions/DatabaseChanges.aspx", { action: "savedb", orderNumber: orderNumber, selectedDb: json_db},
function (response) {
alert('ok');
});
C#:
下面是dbValue
"[{\"dbname\":\"BASINS\",\"distance\":\"0\"},{\"dbname\":\"BROWNFIELD\",\"distance\":\"0.5\"},{\"dbname\":\"BRS\",\"distance\":\"0\"}]"
您需要将JSON解析为.NET数组或列表 许多人为此使用json.NET:
在推送过程中,您可以使用一些字符串操作来逐个填充对象,但我不建议这样做。这里有许多示例。 如果您只想将其转换为字典,请查看以下内容:
但是,ASP.NET MVC中有一种内置机制,可以在方便的时候将json参数自动序列化为预定义对象。您可以定义一个类,该类的属性包括
dbname
和distance
等字段。然后,您可以使用将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));
}
创建具有以下属性的自定义可序列化数据协定类,例如
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;
}
publicstatict FromJSON(字符串jsonValue,IEnumerable knownTypes)
{
//在此处验证输入参数
T结果=默认值(T);
尝试
{
使用(MemoryStream stream=new MemoryStream(Encoding.Unicode.GetBytes(jsonValue)))
{
DataContractJsonSerializer serializer=新的DataContractJsonSerializer(typeof(T),knownTypes);
结果=(T)serializer.ReadObject(流);
}
}
捕获(异常)
{
抛出新异常(“反序列化时出错”,异常);
}
返回结果;
}
将对象列表作为类型参数传递有关答案,请参见此[链接][1]。但你必须使用JArray.Parse。[1]:
[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;
}