C# 在C上操纵字符串化值的值#

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

我有一个下面的代码,它使用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#:

下面是
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;
            }