2014-11-29 5 views
1

Я читаю файлы Json и заполняю список элементов, используя Newtonsoft.Json. У меня проблема с чтением некоторых Json-файлов, поскольку имя атрибута имеет пробелы и, следовательно, оно не совпадает с атрибутами класса Item.Deserialize Json issue из-за пробелов

Это прекрасно. Объекту объекта присваиваются значения ниже.

[ 
    { 
     "FirstName": "John", 
     "SecondName": "Smith" 
    } 
] 

Но мой файл Json, как это, таким образом, объект Item имеет нулевые значения для FirstName и SecondName

[ 
    { 
     "First Name": "John", 
     "Second Name": "Smith" 
    } 
] 

Поэтому мой товар, который имеет свойства FirstName и SecondName (см ниже) получит нулевое значение ,

public class Item 
{ 

    private string firstName = ""; 
    private string secondName = ""; 

    public string FirstName 
    { 
     get { return firstName; } 
     set { firstName = value; } 
    } 

    public string SecondName 
    { 
     get { return secondName; } 
     set { secondName = value; } 
    } 
} 

Есть ли простой способ решить эту проблему. У меня нет никакого контроля на namings (например, FirstName или первое имя в строке Json.

ответ

1

Если вы используете Json.NET, вы можете использовать JsonPropertyAttribute указать имя ваших свойств в формате JSON:

public class Item 
{ 

    private string firstName = ""; 
    private string secondName = ""; 

    [JsonProperty("First Name")] 
    public string FirstName 
    { 
     get { return firstName; } 
     set { firstName = value; } 
    } 

    [JsonProperty("Second Name")] 
    public string SecondName 
    { 
     get { return secondName; } 
     set { secondName = value; } 
    } 
} 
+1

Это фактически тот же ответ, как @Mihai дал и имеет такую ​​же проблему, как указано TJ Кроудер out - он работает для файлов JSON, у которых есть пробелы, но не для тех, которые этого не делают, и OP должен иметь возможность обрабатывать оба. –

1

Это должно получить работу.

[DataContract] 
public class Item 
{ 
    private string firstName= ""; 
    private string secondName= ""; 

    [DataMember(Name = "First Name")] 
    public string FirstName 
    { 
     get { return firstName; } 
     set { firstName= value; } 
    } 

    [DataMember(Name = "Second Name")] 
    public string SecondName 
    { 
     get { return secondName; } 
     set { secondName= value; } 
    } 
} 

Если это не достаточно гибкой для ваших потребностей вы должны реализации пользовательского форматирования
подробнее об этом здесь:. WebApi Json.NET custom date handling

+0

Это будет работать для файлов, которые * имеют * пробелы, но, конечно, не для тех, которые этого не делают (OP, похоже, должен обрабатывать оба). –

+0

В этом случае он должен будет выполнить собственное форматирование, как я предложил. –

+0

что делать, если это не выполнено? Что еще я должен искать? в моем случае «First Name» выглядит следующим образом ниже, это важно, что это не примитивный тип ... «Родитель»: { «Имя»: { «Child1»: [ 1 , 2, 3 ], "Child2": [ 1, 2 , ] }} –