私はasp.net Web APIを持っており、実際には各人物オブジェクトをjsonとしてストリーミングHTTPResponseMessage
するAPIメソッド名があります。GetPersonDataStream
したがって、結果を見ると、実際のデータは、2 つのオブジェクトの間にコンマがない 2 つの個別のオブジェクトのように構築されており、必要に応じて構築されていません。
実際のストリーミング データ:
{"Name":"Ram","Age":30}{"Name":"Sam","Age":32}
.
しかし、これを次のように適切な JSON としてストリーミングしたい:
{"response": [ {"Name":"Ram","Age":30}, {"Name":"Sam","Age":32} ]}
それを達成する方法はありますか。以下は、レコード数が数百万になるため、データをストリーミングするために使用するコードです。一度にすべてのオブジェクトを作成してストリーミングしたくないため、 Syste.OutOfMemory Exception につながる可能性があります。ストリーミングする前にオブジェクトを編集/構築する方法はありますか。はいの場合、どうすればそれを達成できますか。
コード:
[HttpGet]
[Route("GetPersonDataStream")]
public HttpResponseMessage GetPersonDataStream()
{
List<Person> ps = new List<Person>();
Person p1 = new Person();
p1.Name = "Ram";
p1.Age = 30;
Person p2 = new Person();
p2.Name = "Sam";
p2.Age = 32;
ps.Add(p1);
ps.Add(p2);
var response = this.Request.CreateResponse(HttpStatusCode.OK);
response.Content =
new PushStreamContent((stream, content, context) =>
{
foreach (var item in ps)
{
//var result = _clmmgr.GetApprovedCCRDetail(item.ccr_id, liccrDetails);
var serializer = new JsonSerializer();
using (var writer = new StreamWriter(stream))
{
serializer.Serialize(writer, item);
stream.Flush();
}
}
});
return response;
}
public class Person
{
public string Name {get;set;}
public int Age { get; set; }
}