2

私は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; }
    }
4

1 に答える 1