2015-05-28 9 views
0

我有下面的json字符串作为WebMethod的参数。将json字符串反序列化为c#中的对象键值对(逗号分隔值)

我该如何反序列化以使价值出现在关键值对中。

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

回答

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); 
    } 
+0

我用''串[]的OBJ = serializer.Deserialize (mappingData);''和它的工作对我来说。我需要在使用命名空间“JsonConvert”包含哪个程序集? – Gaurav123

0

你为什么不只是改变字符串数组中的每个','':'然后将它传递到方法,从你写什么在这个问题上,这应该工作

相关问题