简体   繁体   中英

System.Text.Json Serialize multiple objects/array

Could someone help me. I'm having problem serializing multiple elements.

I'm getting this result which has multiple root elements.

[
  {
    "TITLE": "title1",
    "Total EP": 16,
    "Current EP": 1,
    "URL": "https://www...",
  }
]
[
  {
    "TITLE": "title2",
    "Total EP": 16,
    "Current EP": 2,
     "URL": "https://www...",
  }
]
[
  {
    "TITLE": "title3",
    "Total EP": 16,
    "Current EP": 3,
    "URL": "https://www....",
  }
]

How I can make the result like this? I don't want to have multiple objects. instead I want them merge in the same object.

[
      {
        "TITLE": "title",
        "Total EP": 16,
        "Current EP": 1,
        "URL": "https://www...",
      },
      {
        "TITLE": "title",
        "Total EP": 16,
        "Current EP": 2,
         "URL": "https://www...",
      },
      {
        "TITLE": "title",
        "Total EP": 16,
        "Current EP": 3,
        "URL": "https://www....",
      }
]

This is the code I'm using u

var total = root.Get("total")?.GetInt32();
var title = root.Get("title")?.GetString();
foreach (var url in root.Get("response")?.EnumerateArray()) {
    var currentEp = url.Get("number")?.GetInt32();
    var url = url.Get("url")?.GetString();
    
    var options = new JsonWriterOptions {
        Indented = true
    };

    using (var stream = new MemoryStream()) {
        using (var writer = new Utf8JsonWriter(stream, options)) {
            writer.WriteStartObject();
            writer.WriteString("TITLE", title);
            writer.WriteNumber("Total EP", total);
            writer.WriteNumber("Current EP", currentEp);
            writer.WriteString("URL", url);
            writer.WriteEndObject();
        }
        string json = Encoding.UTF8.GetString(stream.ToArray());
        Console.WriteLine(json);
    }
}

Here's the example of json.

   {
   "pagination":{
      "previous":null,
      "next":null
   },
   "total":10,
   "title": main title,
   "response":[
      {
         "url":"https.....id1", //URL have different ids
         "number":"1",
      },
        {
         "url":"https.....id2",
         "number":"2",
      },
          {
         "url":"https.....id3",
         "number":"3",
      },
          {
         "url":"https.....id4",
         "number":"4",
      },
          {
         "url":"https.....id5",
         "number":"5",
      },
   ]
}

Thank you for the help.

Try this code

using (var stream = new MemoryStream())
{
    var options = new JsonWriterOptions
    {
        Indented = true
    };
    using (var writer = new Utf8JsonWriter(stream, options))
    {
        writer.WriteStartArray();
        for (int i = 0; i < 10; i++)
        {
            var currentEp = i;
            var total = i;
            var title = $"title{i}";
            var url = $"url:{i}";

            


            writer.WriteStartObject();
            writer.WriteString("TITLE", title);
            writer.WriteNumber("Total EP", total);
            writer.WriteNumber("Current EP", currentEp);
            writer.WriteString("URL", url);
            writer.WriteEndObject();

        }
        writer.WriteEndArray();
        
    }
    string json2 = Encoding.UTF8.GetString(stream.ToArray());
    Console.WriteLine(json2);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM