2016-04-18 4 views
0

Я пытаюсь десериализовать строку JSON, полученную от вызова REST, в чистый объект C#, называемый User. Однако у JSON, который возвращается, есть много «пуха», которое я хочу игнорировать.Deserialise JSON игнорирование обертки

JSON строка выглядит следующим образом:

{ 
    "Items": [ 
    { 
     "LoginID": "A", 
     "EmployeeID": "1", 
     "FirstName": "A", 
     "LastName": "A", 
     "MiddleName": "", 
     "PrimaryEmail": "[email protected]", 
     "Active": true, 
     "CellPhoneNumber": null, 
     "OrganizationUnit": null, 
     "ID": null, 
     "URI": null 
    }, 
    { 
     "LoginID": "B", 
     "EmployeeID": "2", 
     "FirstName": "B", 
     "LastName": "B", 
     "MiddleName": "", 
     "PrimaryEmail": "[email protected]", 
     "Active": true, 
     "CellPhoneNumber": null, 
     "OrganizationUnit": null, 
     "ID": null, 
     "URI": null 
    } 
    ], 
    "NextPage": null 
} 

Я хочу, чтобы преобразовать его в массив объектов пользователя, которые определяются как:

[DataContract] 
    public class User 
    { 
     [DataMember] 
     public string LoginID { get; set; } 
     [DataMember] 
     public string EmployeeID { get; set; } 
     [DataMember] 
     public string FirstName { get; set; } 
     [DataMember] 
     public string LastName { get; set; } 
     [DataMember] 
     public string MiddleName { get; set; } 
     [DataMember] 
     public string PrimaryEmail { get; set; } 
     [DataMember] 
     public bool Active { get; set; } 
     [DataMember] 
     public object CellPhoneNumber { get; set; } 
     [DataMember] 
     public object OrganizationUnit { get; set; } 
     [DataMember] 
     public object ID { get; set; } 
     [DataMember] 
     public object URI { get; set; } 
    } 

Я стараюсь избегать использования Newtonsoft .Json, так как я хочу создать как можно меньше зависимостей.

Использование стандарта DataContractJsonSerializer не будет работать, поскольку он использует возвращаемый поток данных. Я бы хотел избежать создания класса, чтобы JSON соответствовал моей структуре классов и никогда не использовал его, особенно если эти классы подвергаются пользователям кода.

Вкратце, могу ли я только десериализировать определенную часть строки JSON без Newtonsoft.Json? Если нет, то в чем лучшая практика и самый чистый способ десериализации JSON?

Благодаря

+1

Ненавижу, чтобы разбить его вам, но вам нужно будет сделать некоторые программы для достижения своей цели. Очень часто используется для сопоставления с внешними данными во внутренние представления, поэтому вам, вероятно, понадобится это сделать. И тривиально превратить строку в MemoryStream, поэтому не позволяйте этому сдерживать вас от DataContractSerializer. – Crowcoder

+0

Поскольку это будет библиотека, я думаю о том, чтобы просто сосать ее и наполнить все корневые объекты внутренним классом, чтобы пользователь не видел эти классы. Это немного грязно, хотя я надеялся придумать более чистое решение. Если это невозможно без использования строки JSON, эти корневые классы могут быть лучшим и безопасным решением. – plusheen

ответ

0

Я не уверен, если вы можете сделать это без использования NewtonSoft.Json.

Обычно я использую один из этих вариантов для случая, когда вы показываете нам.

Когда значение может быть пустым:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 

или игнорировать для ВСЕГДА десериализации:

[JsonIgnore] 

Эти два варианта будут игнорировать для десериализации.

Смежные вопросы