2015-06-13 18 views
6

Tôi đang cố gắng phân tích phản hồi lịch Google này từ API Rest bằng C#, nhưng dường như tôi vẫn gặp khó khăn. [đã chỉnh sửa] Cập nhật, biểu tượng @ không ngăn chặn quá trình tìm kiếm, tôi đã xác minh bằng cách thay thế @ bằng _at_. Xem ảnh chụp màn hình của đồng hồ nhanh: enter image description herePhân tích cú pháp Json thành đối tượng động C# với khóa động

Tôi chắc rằng tôi đang tiếp cận này không chính xác ...

Đây là jsonString Tôi đang cố gắng để phân tích:

{ 
"kind": "calendar#freeBusy", 
"timeMin": "2015-06-12T14:00:00.000Z", 
"timeMax": "2015-06-14T14:00:00.000Z", 
"calendars": { 
    "[email protected]": { 
    "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" 
    } 
    ] 
    } 
} 
} 

tôi đã cố gắng sử dụng:

dynamic myObj = Json.Decode(jsonString); 

var myObj = JsonConvert.DeserializeObject(jsonString); 

nhưng tôi không thể tìm ra cách để truy cập vào khóa [email protected] (dựa trên những gì tôi gửi lên) để chuyển qua tất cả các thời gian bận rộn.

Ý tưởng?

enter image description here

Trả lời

3

Bạn có thể truy cập nó thông qua một chuỗi indexer:

var myObj = JsonConvert.DeserializeObject<dynamic>(jsonString); 
Console.WriteLine(myObj.calendars["[email protected]"]); 
+0

Điều đó đã làm điều đó, tôi đã có thể truy cập các thuộc tính bằng cách sử dụng phương thức truy cập này: myObj ["lịch"] ["[email protected]"] ["busy"] [0] .start Thanks! – user3491101

+0

Câu hỏi, có cách nào để tự động nhận địa chỉ email không? Tôi biết điều đó, nhưng trong tương lai nếu tôi không biết - tôi sẽ truy cập nó như thế nào? Có một số loại tài sản trẻ em hoặc một cái gì đó tương tự? – user3491101

+1

foreach (mục var trong myObj ["lịch"]) Console.WriteLine (item.Name) –

0

Tôi đã giải quyết một vấn đề tương tự trong quá khứ, tuy nhiên tôi đã là một vấn đề của gạch nối, tôi chỉ đơn giản là thay thế gạch nối với dấu gạch dưới. bạn có khả năng có thể làm điều gì đó tương tự tuy nhiên thấy rằng đó là một địa chỉ e-mail, nó có thể là tốt hơn để sửa đổi giản đồ (biểu thức chính quy khi thấy rằng bạn nhận được json từ API của bên thứ ba) tạo một khóa mới "mail" để bạn có thể đảm bảo rằng bạn giữ nguyên địa chỉ email gốc.

Nhưng có lẽ quan trọng hơn, khi bạn truy vấn API này có lẽ bạn đã biết email, nếu vậy bạn chỉ có thể làm một regex thay thế:

 string json = '... {"[email protected]":...}...'; 
     Regex regex = new Regex(@"\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"); 
     string jsonfixed = regex.Replace(json, "email"); 
+0

Cảm ơn Joachim, tôi đã thử thay thế biểu tượng @, nhưng nó không giúp giải quyết vấn đề của tôi - xem ảnh chụp màn hình đồng hồ bấm giờ ở trên. Có vẻ như nó là một Json lồng nhau trong Json? – user3491101

Các vấn đề liên quan