JsonItemWriter, JsonTextWriter. , - . , JsonTextWriter StartArray . ItemWriter , EndArray . , ItemWriter JsonTextWriter.
JsonItemWriter:
class JsonItemWriter
{
private JsonTextWriter innerWriter;
private JsonSerializer serializer;
public JsonItemWriter(JsonTextWriter innerWriter, JsonSerializer serializer)
{
this.innerWriter = innerWriter;
this.serializer = serializer;
}
public void WriteItem(object item)
{
if (innerWriter.WriteState == Newtonsoft.Json.WriteState.Start)
{
innerWriter.WriteStartArray();
}
serializer.Serialize(innerWriter, item);
innerWriter.Flush();
}
public void Close()
{
innerWriter.WriteEndArray();
innerWriter.Close();
}
}
:
_jsonWriter = new JsonTextWriter(new StreamWriter("Output.json"));
_itemWriter = new JsonItemWriter(_jsonWriter, _jsonSerializer);
DataGatherer.ItemGathered += item =>
{
_itemWriter.WriteItem(item);
};
, DataGatherer :
class Program
{
static void Main(string[] args)
{
JsonSerializer jsonSerializer = new JsonSerializer();
JsonTextWriter jsonWriter = new JsonTextWriter(new StreamWriter("Output.json"));
JsonItemWriter itemWriter = new JsonItemWriter(jsonWriter, jsonSerializer);
MockDataGatherer gatherer = new MockDataGatherer();
gatherer.ItemGathered += item =>
{
itemWriter.WriteItem(item);
};
var items = new[]
{
new { Id = 218515, Name = "A" },
new { Id = 118647, Name = "B" }
};
gatherer.SimulateReceivingItems(items);
itemWriter.Close();
using (StreamReader reader = new StreamReader("Output.json"))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
class MockDataGatherer
{
public void SimulateReceivingItems(IEnumerable<object> items)
{
foreach (object item in items)
{
ItemGathered(item);
}
}
public event ItemGatheredEventHandler ItemGathered;
public delegate void ItemGatheredEventHandler(object item);
}
( , ):
[{"Id":218515,"Name":"A"},{"Id":118647,"Name":"B"}]