使用JavaScriptSerializer反序列化带唯一键的JSON对象集合遇阻求助
解决方案
你的JSON外层是键值对形式的对象(每个唯一键对应一个用户信息对象),并非数组结构,所以直接反序列化为List<string>必然失效。以下是两种可行的解决方法:
方法一:反序列化为字典
将JSON反序列化为Dictionary<string, User>类型,其中User是匹配内部结构的实体类:
- 定义实体类:
public class User { public string Adress { get; set; } public string ID { get; set; } public string Namn { get; set; } public string TelefonNummer { get; set; } }
- 执行反序列化:
var serializer = new JavaScriptSerializer(); var userDictionary = serializer.Deserialize<Dictionary<string, User>>(s);
之后你可以通过唯一键访问单个用户,或遍历字典获取所有用户:
// 遍历所有用户数据 foreach (var entry in userDictionary) { string uniqueKey = entry.Key; User userInfo = entry.Value; // 访问userInfo.Adress、userInfo.ID等属性 }
方法二:提取用户对象转为列表
如果不需要保留外层的唯一键,仅需用户信息集合,可在反序列化为字典后提取所有值:
var userList = userDictionary.Values.ToList();
原方法失效原因
你的JSON用{}包裹,属于对象结构;而List<string>对应JSON中[]包裹的数组结构,类型不匹配导致反序列化失败。必须保证.NET类型与JSON结构一一对应。
内容的提问来源于stack exchange,提问作者Benjamin Kararic
相关产品推荐
相关产品推荐

