"JSONObject / JSON Set" als Klassen in C#

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von DanCooper.

    "JSONObject / JSON Set" als Klassen in C#

    Hallo miteinander

    ich möchte gerne in C# einige Klassen erstellen, die folgendes JSON abbilden:

    JSON-Quellcode

    1. {"episodeid":1,"ratings":{"tmdb":{"rating":8,"votes":2},"imdb":{"rating":9,"votes":214}}}


    Mein Problem sind grundsätzlich nur die ratings, episodeid ist nur der Vollständigkeit halber noch drin. Ich will folgendes implementieren: kodi.wiki/view/JSON-RPC_API/v6#Video.Ratings.Set

    Wie müssen die Klassen aussehen, so dass ich beliebig viele Ratings hinzufügen und dabei auch den Namen (z.B. wie oben "tmdb" und "imdb") definieren kann? Ich will also nicht für jedes Ratin bereits im Vorfeld ein Property mit dem jeweiligen Namen erstellen, soweit bin ich schon. Die Klasse für das Rating selbst habe ich ebvenfalls bereits und es sieht so aus:

    C-Quellcode

    1. namespace XBMCRPC.Video
    2. {
    3. public class Rating
    4. {
    5. public bool @default { get; set; }
    6. public double rating { get; set; }
    7. public int votes { get; set; }
    8. }
    9. }
    Versuch es mal mit folgendem:

    C#-Quellcode

    1. var a = new RootObject();
    2. a.episodeid = 1;
    3. a.ratings = new Dictionary<string, Rating>();
    4. a.ratings.Add("foo", new Rating() { rating = 1, votes = 10 });
    5. a.ratings.Add("bar", new Rating() { rating = 2, votes = 10 });
    6. string json = JsonConvert.SerializeObject(a, Formatting.Indented);
    7. public class RootObject
    8. {
    9. public int episodeid { get; set; }
    10. public Dictionary<string, Rating> ratings { get; set; }
    11. }
    12. public class Rating
    13. {
    14. public int rating { get; set; }
    15. public int votes { get; set; }
    16. }


    Quellcode

    1. {
    2. "episodeid": 1,
    3. "ratings": {
    4. "foo": {
    5. "rating": 1,
    6. "votes": 10
    7. },
    8. "bar": {
    9. "rating": 2,
    10. "votes": 10
    11. }
    12. }
    13. }