我有一些看起来像这样的JSON数据:
{ "response":{ "_token":"StringValue", "code":"OK", "user":{ "userid":"2630944", "firstname":"John", "lastname":"Doe", "reference":"999999999", "guid":"StringValue", "domainid":"99999", "username":"jdoe", "email":"jdoe@jdoe.edu", "passwordquestion":"", "flags":"0", "lastlogindate":"2013-02-05T17:54:06.31Z", "creationdate":"2011-04-15T14:40:07.22Z", "version":"3753", "data":{ "aliasname":{ "$value":"John Doe" }, "smsaddress":{ "$value":"5555555555@messaging.sprintpcs.com" }, "blti":{ "hideemail":"false", "hidefullname":"false" }, "notify":{ "grades":{ "$value":"0" }, "messages":{ "$value":"1" } }, "beta_component_courseplanexpress_1":{ "$value":"true" } } } }
我在JSON.NET中使用C#来解析数据。我已经能够使用以下算法成功获取数据:
User MyUser = new User(); JToken data = JObject.Parse(json); MyUser.FirstName = (string) data.SelectToken("response.user.firstname"); //The same for all the other properties.
问题出在data领域上。此字段主要基于用户首选项,并且仅在使用数据时插入数据。这些字段都是自定义字段,开发人员可以随意输入任意数量,没有限制。本质上,它们都是自由格式的数据。另外,正如您所注意到的,它们可以与数据真正嵌套在一起。
data
我试着跑:
MyUser.Data = JsonConvert.DeserializeObject<List<JToken>>((string) data.SelectToken("response.user.data");
这不起作用。
您将如何将其转换为在C#对象中使用?
您可以通过JToken/ JArray/ JObject方法访问它。例如,这将列出数据下的所有键:
JToken
JArray
JObject
public class StackOverflow_14714085 { const string JSON = @"{ ""response"": { ""_token"": ""StringValue"", ""code"": ""OK"", ""user"": { ""userid"": ""2630944"", ""firstname"": ""John"", ""lastname"": ""Doe"", ""reference"": ""999999999"", ""guid"": ""StringValue"", ""domainid"": ""99999"", ""username"": ""jdoe"", ""email"": ""jdoe@jdoe.edu"", ""passwordquestion"": """", ""flags"": ""0"", ""lastlogindate"": ""2013-02-05T17:54:06.31Z"", ""creationdate"": ""2011-04-15T14:40:07.22Z"", ""version"": ""3753"", ""data"": { ""aliasname"": { ""$value"": ""John Doe"" }, ""smsaddress"": { ""$value"": ""5555555555@messaging.sprintpcs.com"" }, ""blti"": { ""hideemail"": ""false"", ""hidefullname"": ""false"" }, ""notify"": { ""grades"": { ""$value"": ""0"" }, ""messages"": { ""$value"": ""1"" } }, ""beta_component_courseplanexpress_1"": { ""$value"": ""true"" } } } } }"; public static void Test() { var jo = JObject.Parse(JSON); var data = (JObject)jo["response"]["user"]["data"]; foreach (var item in data) { Console.WriteLine("{0}: {1}", item.Key, item.Value); } } }