【发布时间】:2015-02-09 22:44:10
【问题描述】:
我有一个字典,它是在我反序列化基于类的 JSON 对象时创建的。
例如,我的班级是这样的
public MyClass
{
public string someString {get;set;}
public double someDouble {get;set;}
public bool someBool {get;set;}
public List<string> valList {get;set;}
public List<string> valList2 {get;set;}
}
当使用 JSON.NET 读回 JSON 对象并对其进行反序列化时,经过一些处理后,我最终得到了我的字典。
我可以很容易地获得非列表
我试过了
var fi = new List<string>(){};
fi = myDict["myKey"] as List<string>;
和
fi = myDict["myKey"]
但两者都没有编译
有没有办法从字典中提取我的列表?
反序列化就是这样完成的
public static T DeserialiseEventData<T>(this T obj, string serialisedData)
{
try
{
return (T)JsonConvert.DeserializeObject(serialisedData, typeof(T));
}
catch
{
return default(T);
}
}
对于字典,我首先使用方法 1 创建键(字符串),然后使用 vals = GetValuesFromClass(cts); 调用以下方法
private static List<string> GetValuesFromClass<T>(T obj)
{
var rv = new List<string>();
if (obj == null)
return rv;
var type = obj.GetType();
var t = type.GetProperties();
if (t.Length > 0)
{
for (var i = 0; i < t.Length; ++i)
{
if (t[i].ToString().Contains("List"))
{
var lstProperty = t[i].Name;
var res = obj.GetType().GetProperty(lstProperty).GetValue(obj, null) as List<string>;
Console.WriteLine(lstProperty);
if (res != null)
{
if (res.Count == 0)
rv.AddRange(new List<string>(){ string.Empty });
else
rv.AddRange(res);
}
else
{
rv.AddRange(new List<string>(){ string.Empty });
}
}
else
{
var test = t[i].GetValue(obj, null);
if (test == null)
rv.Add(string.Empty);
else
rv.Add(test.ToString());
}
}
}
return rv;
}
返回时,我会这样做
for (var i = 0; i < translate.Count; ++i)
rvDict.Add(keys, vals[i]);
【问题讨论】:
-
您能否添加一个 json 输入样本(小 sn-p)以及将其序列化到该类中的端点方法?
-
由于您既没有显示json也没有显示字典声明,因此任何人都无法回答这个问题。你也没有告诉我们编译错误是什么。
-
如果您声明了
dictionary<string,string>,例如,您可以将字典对象转换为 Listvar fi = YourDictionary.Keys.ToList(); -
我已经扩展了这个问题,希望能有所帮助
标签: c# json dictionary