2015-09-30 3 views
0

Так вот что я получаю назад от службы OData ...десериализации OData в здравом объекта с ServiceStack

{ 
    "odata.metadata":"http://server.ca/Mediasite/Api/v1/$metadata#UserProfiles", 
    "value":[ 
     { 
     "odata.id":"http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')", 
     "[email protected]":"http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')/QuotaPolicy", 
     "#SetQuotaPolicyFromLevel":{ 
      "target":"http://server.ca/Mediasite/Api/v1/UserProfiles('111111111111111')/SetQuotaPolicyFromLevel" 
     }, 
     "Id":"111111111111111", 
     "UserName":"testuser", 
     "DisplayName":"testuser Large", 
     "Email":"[email protected]", 
     "Activated":true, 
     "HomeFolderId":"312dcf4890df4b129e248a0c9a57869714", 
     "ModeratorEmail":"[email protected]", 
     "ModeratorEmailOptOut":false, 
     "DisablePresentationContentCompleteEmails":false, 
     "DisablePresentationContentFailedEmails":false, 
     "DisablePresentationChangeOwnerEmails":false, 
     "TimeZone":26, 
     "PresenterFirstName":null, 
     "PresenterMiddleName":null, 
     "PresenterLastName":null, 
     "PresenterEmail":null, 
     "PresenterPrefix":null, 
     "PresenterSuffix":null, 
     "PresenterAdditionalInfo":null, 
     "PresenterBio":null, 
     "TrustDirectoryEntry":null 
     } 
    ] 
} 

Я десериализации это в простой класс, как только важные вещи (Id , Username и т. Д.) До конца).

У меня есть класс, но для жизни я не могу понять, как выбросить все объекты-обертки, которые oData ставит вокруг этой вещи.

Может ли кто-нибудь пролить свет?

ответ

2

Вы можете использовать JsonObject сделать динамически пересекать JSON, например:

var users = JsonObject.Parse(json).ArrayObjects("value") 
    .Map(x => new User 
    { 
     Id = x.Get<long>("Id"), 
     UserName = x["UserName"], 
     DisplayName = x["DisplayName"], 
     Email = x["Email"], 
     Activated = x.Get<bool>("Activated"), 
    }); 

users.PrintDump(); 

Или десериализация в модель, которая соответствует форме JSON, например:

public class ODataUser 
{ 
    public List<User> Value { get; set; } 
} 

public class User 
{ 
    public long Id { get; set; } 
    public string UserName { get; set; } 
    public string DisplayName { get; set; } 
    public string Email { get; set; } 
    public bool Activated { get; set; } 
    public string HomeFolderId { get; set; } 
    public string ModeratorEmail { get; set; } 
    public bool ModeratorEmailOptOut { get; set; } 
    public bool DisablePresentationContentCompleteEmails { get; set; } 
    public bool DisablePresentationContentFailedEmails { get; set; } 
    public bool DisablePresentationChangeOwnerEmails { get; set; } 
    public int TimeZone { get; set; } 
} 

var odata = json.FromJson<ODataUser>(); 
var user = odata.Value[0]; 
Смежные вопросы