2015-04-19 12 views
6

Sto usando JSON.NET e C# 5. Ho bisogno di serializzare/de-serializzare la lista di oggetti in jim delimitato di linea. http://en.wikipedia.org/wiki/Line_Delimited_JSON. Esempio,Line serial json serializing and de-serializing

{"some":"thing1"} 
{"some":"thing2"} 
{"some":"thing3"} 

e

{"kind": "person", "fullName": "John Doe", "age": 22, "gender": "Male", "citiesLived": [{ "place": "Seattle", "numberOfYears": 5}, {"place": "Stockholm", "numberOfYears": 6}]} 
{"kind": "person", "fullName": "Jane Austen", "age": 24, "gender": "Female", "citiesLived": [{"place": "Los Angeles", "numberOfYears": 2}, {"place": "Tokyo", "numberOfYears": 2}]} 

Perché avevo bisogno perché il suo fabbisogno di Google BigQuery https://cloud.google.com/bigquery/preparing-data-for-bigquery

Aggiornamento: Un modo che ho trovato è che serializzare ogni oggetto siderati individualmente e si uniscono alla fine, con nuova linea.

risposta

12

È possibile eseguire questa operazione analizzando manualmente il proprio JSON utilizzando JsonTextReader e impostando il flag SupportMultipleContent su true.

Se guardiamo al vostro primo esempio, e creare un POCO chiamato Foo:

public class Foo 
{ 
    [JsonProperty("some")] 
    public string Some { get; set; } 
} 

Questo è il modo in cui analizziamo è:

var json = "{\"some\":\"thing1\"}\r\n{\"some\":\"thing2\"}\r\n{\"some\":\"thing3\"}"; 
var jsonReader = new JsonTextReader(new StringReader(json)) 
{ 
    SupportMultipleContent = true // This is important! 
}; 

var jsonSerializer = new JsonSerializer(); 
while (jsonReader.Read()) 
{ 
    Foo foo = jsonSerializer.Deserialize<Foo>(jsonReader); 
}