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

时间:2015-05-28 05:36:25

标签: c# json webmethod json-deserialization

我在字符串中的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"]

的WebMethod:

[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;
}

2 个答案:

答案 0 :(得分:1)

如果您需要使用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);
    }

答案 1 :(得分:0)

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