1+ using System . Collections . Generic ;
2+ using NUnit . Framework ;
3+
4+ namespace ServiceStack . Text . Tests . DynamicModels
5+ {
6+ [ TestFixture ]
7+ public class ODataTests
8+ {
9+ const string json = @"{
10+ ""odata.metadata"":""http://server.ca/Mediasite/Api/v1/$metadata#UserProfiles"",
11+ ""value"":[
12+ {
13+ ""odata.id"":""http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')"",
14+ ""QuotaPolicy@odata.navigationLinkUrl"":""http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')/QuotaPolicy"",
15+ ""#SetQuotaPolicyFromLevel"":{
16+ ""target"":""http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')/SetQuotaPolicyFromLevel""
17+ },
18+ ""Id"":""111111111111111"",
19+ ""UserName"":""testuser"",
20+ ""DisplayName"":""testuser Large"",
21+ ""Email"":""testuser@testuser.ca"",
22+ ""Activated"":true,
23+ ""HomeFolderId"":""312dcf4890df4b129e248a0c9a57869714"",
24+ ""ModeratorEmail"":""testuser@testuserlarge.ca"",
25+ ""ModeratorEmailOptOut"":false,
26+ ""DisablePresentationContentCompleteEmails"":false,
27+ ""DisablePresentationContentFailedEmails"":false,
28+ ""DisablePresentationChangeOwnerEmails"":false,
29+ ""TimeZone"":26,
30+ ""PresenterFirstName"":null,
31+ ""PresenterMiddleName"":null,
32+ ""PresenterLastName"":null,
33+ ""PresenterEmail"":null,
34+ ""PresenterPrefix"":null,
35+ ""PresenterSuffix"":null,
36+ ""PresenterAdditionalInfo"":null,
37+ ""PresenterBio"":null,
38+ ""TrustDirectoryEntry"":null
39+ }
40+ ]
41+ }" ;
42+
43+ public class ODataUser
44+ {
45+ public List < User > Value { get ; set ; }
46+ }
47+
48+ public class User
49+ {
50+ public long Id { get ; set ; }
51+ public string UserName { get ; set ; }
52+ public string DisplayName { get ; set ; }
53+ public string Email { get ; set ; }
54+ public bool Activated { get ; set ; }
55+ public string HomeFolderId { get ; set ; }
56+ public string ModeratorEmail { get ; set ; }
57+ public bool ModeratorEmailOptOut { get ; set ; }
58+ public bool DisablePresentationContentCompleteEmails { get ; set ; }
59+ public bool DisablePresentationContentFailedEmails { get ; set ; }
60+ public bool DisablePresentationChangeOwnerEmails { get ; set ; }
61+ public int TimeZone { get ; set ; }
62+ }
63+
64+ private static void AssertUser ( User user )
65+ {
66+ Assert . That ( user . Id , Is . EqualTo ( 111111111111111 ) ) ;
67+ Assert . That ( user . UserName , Is . EqualTo ( "testuser" ) ) ;
68+ Assert . That ( user . DisplayName , Is . EqualTo ( "testuser Large" ) ) ;
69+ Assert . That ( user . Email , Is . EqualTo ( "testuser@testuser.ca" ) ) ;
70+ Assert . That ( user . Activated ) ;
71+ }
72+
73+ [ Test ]
74+ public void Can_extract_model_in_OData_with_JsonObject ( )
75+ {
76+ var users = JsonObject . Parse ( json ) . ArrayObjects ( "value" )
77+ . Map ( x => new User
78+ {
79+ Id = x . Get < long > ( "Id" ) ,
80+ UserName = x [ "UserName" ] ,
81+ DisplayName = x [ "DisplayName" ] ,
82+ Email = x [ "Email" ] ,
83+ Activated = x . Get < bool > ( "Activated" ) ,
84+ } ) ;
85+
86+ users . PrintDump ( ) ;
87+ AssertUser ( users [ 0 ] ) ;
88+
89+ users = JsonObject . Parse ( json ) . ArrayObjects ( "value" )
90+ . Map ( x => x . ConvertTo < User > ( ) ) ;
91+
92+ users . PrintDump ( ) ;
93+ AssertUser ( users [ 0 ] ) ;
94+ }
95+
96+ [ Test ]
97+ public void Can_Deserialize_OData_into_POCOs ( )
98+ {
99+ var odata = json . FromJson < ODataUser > ( ) ;
100+ AssertUser ( odata . Value [ 0 ] ) ;
101+ }
102+ }
103+ }
0 commit comments