2016-10-21 6 views
2

У меня есть JSON, как показано ниже,Преобразовать JSON массив в C# коллекции объекта

[ 
    { 
    "document": 
      { 
       "createdDate":1476996267864, 
       "processedDate":1476996267864, 
       "taxYear":"2015", 
       "type":"user_document" 
      } 
    }, 
    { 
    "document": 
      { 
       "createdDate":1476998303463, 
       "processedDate":0, 
       "taxYear":"2015", 
       "type":"user_document" 
      } 
    } 
    ] 

Мне нужно, чтобы преобразовать его в C# объекта. Мой тип объекта, как

ценам ниже
public class UserDocument 
    { 
     [JsonProperty(PropertyName = "type")] 
     public string type { get; set; } 

     [JsonProperty(PropertyName = "taxYear")] 
     public string taxYear { get; set; } 

     [JsonProperty(PropertyName = "createdDate")] 
     public string createdDate { get; set; } 

     [JsonProperty(PropertyName = "processedDate")] 
     public string processedDate { get; set; } 

    } 

Я использую ниже код десериализации JSON, но все свойства UserDocument нулевые

var test = JsonConvert.DeserializeObject<List<UserDocument>>(jsonString); 

Почему я получаю все свойства UserDocument равны нулю, что здесь не так ? Я не получаю никаких ошибок.

Также вы можете предложить хороший пример при получении запроса CouchBase в объект .net.

+0

'processedDate' и' createdDate' не являются строками. – RhinoDevel

+0

Возможный дубликат http://stackoverflow.com/questions/4611031/convert-json-string-to-c-sharp-object –

+0

ваш json ошибочен – Mostafiz

ответ

4

Кажется, что ваш json не в правильном формате. Если я говорю, ваш JSON, как

[ 
    "document": 
      { 
       "createdDate":1476996267864, 
       "processedDate":1476996267864, 
       "taxYear":"2015", 
       "type":"user_document" 
      }, 

    "document": 
      { 
       "createdDate":1476998303463, 
       "processedDate":0, 
       "taxYear":"2015", 
       "type":"user_document" 
      } 
    ] 

Затем создать модель, как

public class Document 
{ 
    public UserDocument document {get;set;} 
} 

и изменить UserDocument модели createdDate и processedDate свойства, как double потому, что его, как, что в вашем JSON

public class UserDocument 
    { 
     [JsonProperty(PropertyName = "type")] 
     public string type { get; set; } 

     [JsonProperty(PropertyName = "taxYear")] 
     public string taxYear { get; set; } 

     [JsonProperty(PropertyName = "createdDate")] 
     public double createdDate { get; set; } 

     [JsonProperty(PropertyName = "processedDate")] 
     public double processedDate { get; set; } 

    } 

, а затем десериализовать

var test = JsonConvert.DeserializeObject<List<Document>>(jsonString); 
+0

Вы также можете добавить свойства в свой класс 'UserDocument', который возвращает свойства' createdDate' и 'обработанныеDate' как значения DateTime. – krillgar

+0

@Mostafiz - Он работает, спасибо много! – blue

+0

@krillgar те не являются фактическими тип datetime они utc двойное значение эквивалентного datetiem – Mostafiz

1

Нечто подобное (с использованием Newtonsoft.Json.Linq):

var documents = JArray.Parse(json).Select(t => t["document"].ToObject<UserDocument>());

+0

этот workd тоже – blue