2014-10-30 5 views
-1

У меня есть файл с несколькими JSON objects.How может я прочитал это в .netСчитывание нескольких объектов JSon из файла JSON

мне нужно ниже строку как два JSON obejcts

«{привет:» там '} {прощай: «ты», спасибо: «ты») «

+0

где - родительский объект? – Dibu

+0

Нет родительского объекта, так как это два json-объекта в одном файле. Этот json-файл создается из системы. Файл содержит два или более json-объектов. Мы должны прочитать его и сохранить в базе данных сервера sql –

+0

, но вы не можете обращаться к объектам по отдельности или помещать эти jsons в массив или в объект json, например [{hello: 'there'}, {goodbye:' you ', Thanks:' you '}] или {"hello": { hello: 'there'}, "greetings": {goodbye: 'you', Thanks: 'you'}} – Dibu

ответ

1

@Anu: Прежде всего, я не думаю, что указанная строка« {hello:' there'} {goodbye: 'you' , Спасибо: 'you'} "- это правильная строка Json.

Это должно быть, как этот десериализации правильно { "Прибытие": { "Hello": "там"}, "Вылет": { "Goodbye": "ты", "спасибо": "Вы" }}.

Посмотрите на примере ниже для правильной структуры:

enter image description here

// Вы должны установить Json.NET и использовать его, как показано ниже:

using Newtonsoft.Json; 

// Объект для сериализации и десериализации:

public class Greeting 
{ 

    public Arrival Arrival { get; set; } 
    public Departure Departure { get; set; } 
} 

public class Arrival 
{ 
    public string Hello { get; set; } 

} 

public class Departure 
{ 
    public string GoodBye { get; set; } 
    public string Thanks { get; set; } 

} 

// Население # способ Получение объекта C

var greeting = new Greeting 
       { 
        Arrival = new Arrival { Hello = "there" }, 
        Departure = new Departure { GoodBye = "you", Thanks = "you" } 
       }; 

// сериализовать C# объект Json

var jsonString = JsonConvert.SerializeObject(new 
     { 
       Arrival = new 
       { 
        greeting.Arrival.Hello 
       }, 
       Departure = new { greeting.Departure.GoodBye, greeting.Departure.Thanks } 
      }); 

// Который производит эту JSon строку: { "Прибытие": { "Hello": "там"} "Вылет": { "Goodbye": "ты", "спасибо": "вы"}}

// Преобразование строки JSON обратно в C# объект - Deserialize объект

var greeting1 = (Greeting)JsonConvert.DeserializeObject(jsonString, typeof(Greeting)); 

Надеюсь, что это поможет и ответит на ваш вопрос.

Удачи вам!

+0

Большое спасибо за ваш ответ. Я не могу создать типизированный класс, потому что содержание json не будет таким же всегда. Моим требованием является чтение нескольких частей содержимого json из одного файла. Из этого URL https://www.newtonsoft.com/json/help/index.html? topic = html/P_Newtonsoft_Json_JsonReader_SupportMultipleContent.htm, упоминается, что можно читать несколько кусочков json. –

+0

Если да, тогда у вас есть ответ по ссылке, предоставленной Брайаном Роджерсом. Взгляните, это просто объясняет, что вы ищете. Удачи! – Vincy

+0

Thanx all..Brian Rogers - это правда. –

1

Dibu прав - ваша строка не является допустимым объектом JSON, поэтому вы не можете десериализовать ее обратно на объекты (объекты) автоматически.

Вы должны либо написать свой собственный парсер (упс, не делает этого) или изменение входного файла источник силы, чтобы один из:

  1. Содержать один действительный объект JSON (сделанные из нескольких отдельных объектов), так что вы можете легко десериализовать его.
  2. Содержит отдельные разделители (разделители) между отдельными объектами, поэтому вы можете разделить исходную строку вручную и десериализовать объекты по одному.

Самый лучший вариант, чтобы изменить исходный файл содержит один действительный объект, но я предполагаю, что это не ваше решение о таком формате исходного файла ...

0

Существует способ. Вам нужно, чтобы JsonConverter проходил при десериализации.

string json = @"{hello:'there'} {goodbye:'you',Thanks:'you'}"; 

IList<Greeting> greetings= new List<Greeting>(); 
JsonTextReader reader = new JsonTextReader(new StringReader(json)); 
// this is the important part, which makes the reader not throw exception 
//when one json object is finished 
reader.SupportMultipleContent = true; 
while (true) 
{ 
    if (!reader.Read()) 
    { 
     break; 
    } 

    JsonSerializer serializer = new JsonSerializer(); 
    Greeting greeting= serializer.Deserialize<Greeting>(reader); 

    greetings.Add(greeting); 
} 
Смежные вопросы