使用动态键将 Json 解析为动态 C# 对象
Parsing Json into a dynamic c# object with a dynamic key
我正在尝试使用 c# 解析我从他们的 Rest API 获得的 Google 日历响应,但我似乎一直卡住了。 [已编辑] 更新,@ 符号不会阻止向下钻取,我通过将 @
替换为 _at_
进行了验证。看快看截图:
我确定我访问的有误...
这是我要解析的 jsonString
:
{
"kind": "calendar#freeBusy",
"timeMin": "2015-06-12T14:00:00.000Z",
"timeMax": "2015-06-14T14:00:00.000Z",
"calendars": {
"joe@bobs.com": {
"busy": [
{
"start": "2015-06-13T18:30:00Z",
"end": "2015-06-13T19:30:00Z"
},
{
"start": "2015-06-13T20:30:00Z",
"end": "2015-06-13T21:30:00Z"
},
{
"start": "2015-06-13T23:00:00Z",
"end": "2015-06-14T00:00:00Z"
}
]
}
}
}
我试过使用:
dynamic myObj = Json.Decode(jsonString);
和
var myObj = JsonConvert.DeserializeObject(jsonString);
但我不知道如何进入 joe@bobs.com
键(根据我发送的内容是动态的)来循环所有繁忙时间。
想法?
我过去处理过类似的问题,但是我的是连字符的问题,我只是用下划线替换了连字符。您可能会做类似的事情,但是看到它是一个电子邮件地址,最好修改模式(正则表达式看到您从第三方 API 收到 json)创建一个新密钥 "mail" 以便您可以确保保持原始电子邮件地址不变。
但也许更重要的是,当您查询此 API 时,您可能已经知道该电子邮件,如果是这样,您可以简单地进行正则表达式替换:
string json = '... {"joe@bobs.com":...}...';
Regex regex = new Regex(@"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b");
string jsonfixed = regex.Replace(json, "email");
您可以通过字符串索引器访问它:
var myObj = JsonConvert.DeserializeObject<dynamic>(jsonString);
Console.WriteLine(myObj.calendars["joe@bobs.com"]);
我正在尝试使用 c# 解析我从他们的 Rest API 获得的 Google 日历响应,但我似乎一直卡住了。 [已编辑] 更新,@ 符号不会阻止向下钻取,我通过将 @
替换为 _at_
进行了验证。看快看截图:
我确定我访问的有误...
这是我要解析的 jsonString
:
{
"kind": "calendar#freeBusy",
"timeMin": "2015-06-12T14:00:00.000Z",
"timeMax": "2015-06-14T14:00:00.000Z",
"calendars": {
"joe@bobs.com": {
"busy": [
{
"start": "2015-06-13T18:30:00Z",
"end": "2015-06-13T19:30:00Z"
},
{
"start": "2015-06-13T20:30:00Z",
"end": "2015-06-13T21:30:00Z"
},
{
"start": "2015-06-13T23:00:00Z",
"end": "2015-06-14T00:00:00Z"
}
]
}
}
}
我试过使用:
dynamic myObj = Json.Decode(jsonString);
和
var myObj = JsonConvert.DeserializeObject(jsonString);
但我不知道如何进入 joe@bobs.com
键(根据我发送的内容是动态的)来循环所有繁忙时间。
想法?
我过去处理过类似的问题,但是我的是连字符的问题,我只是用下划线替换了连字符。您可能会做类似的事情,但是看到它是一个电子邮件地址,最好修改模式(正则表达式看到您从第三方 API 收到 json)创建一个新密钥 "mail" 以便您可以确保保持原始电子邮件地址不变。
但也许更重要的是,当您查询此 API 时,您可能已经知道该电子邮件,如果是这样,您可以简单地进行正则表达式替换:
string json = '... {"joe@bobs.com":...}...';
Regex regex = new Regex(@"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b");
string jsonfixed = regex.Replace(json, "email");
您可以通过字符串索引器访问它:
var myObj = JsonConvert.DeserializeObject<dynamic>(jsonString);
Console.WriteLine(myObj.calendars["joe@bobs.com"]);