将 json 字符串反序列化为键值对中的 c# 对象(逗号分隔值)

Deserialize json string to object in c# in Key value pair (Comma separated values)

我有以下 json 字符串作为 WebMethod 的参数。

我怎样才能以键值对中出现值的方式进行反序列化。

Json 字符串参数:

["Ref No,0","Date,0","Amt,0","Sender Name,0","Sender Add,0","Beneficiary Name,0","Beneficiary Add,0","Phone,0","Secret Code,0","Secret Ans,0","Preferred Id,0"]

网络方法:

[System.Web.Services.WebMethod]
public static string SaveMappings(string mappingData)
{
    //string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
    //JavaScriptSerializer serializer = new JavaScriptSerializer();
    //object obj;
    //var data = serializer.Deserialize(mappingData,);

    var data = mappingData.ToArray();
    if (data != null)
    {

    }

    var d2 = mappingData.Split(',');
    if (d2!=null)
    {

    }

    return mappingData;
}

你为什么不直接将字符串数组中的每个 ',' 更改为 ':' 然后将其传递给方法,从你在问题中写的内容来看,这应该有效

如果您需要使用 JSON 数据,请使用 Newtonsoft.JSON 库。 将对象转换为字符串数组,然后拆分每一行。 使用这种方法,您可以确定给定的字符串实际上是一个 JSON 数组并且它是正确的。

    var str = "[\"Ref No,0\",\"Date,0\",\"Amt,0\",\"Sender Name,0\",\"Sender Add,0\",\"Beneficiary Name,0\",\"Beneficiary Add,0\",\"Phone,0\",\"Secret Code,0\",\"Secret Ans,0\",\"Preferred Id,0\"]";

    string[] objs = JsonConvert.DeserializeObject<string[]>(str);

    Dictionary<string, string> dic = new Dictionary<string, string>();

    foreach (var obj in objs)
    {
        var keyValue = obj.Split(',');
        dic.Add(keyValue[0], keyValue[1]);
    }

    foreach (var record in dic)
    {
        Console.WriteLine("{0} => {1}", record.Key, record.Value);
    }

或者这个使用 LINQ。它看起来更好,并且可以更快地编写。但是,它不是最优的(两次调用 Split 而不是一次)。

    public Dictionary<string, string> FromJsonArray(string jsonArray)
    {
        return JsonConvert.DeserializeObject<string[]>(jsonArray)
            .ToDictionary(obj => obj.Split(',')[0], obj => obj.Split(',')[1]);
    }

    // ...

    var str = "[\"Ref No,0\",\"Date,0\",\"Amt,0\",\"Sender Name,0\",\"Sender Add,0\",\"Beneficiary Name,0\",\"Beneficiary Add,0\",\"Phone,0\",\"Secret Code,0\",\"Secret Ans,0\",\"Preferred Id,0\"]";

    foreach (var record in FromJsonArray(str))
    {
        Console.WriteLine("{0} => {1}", record.Key, record.Value);
    }