SendMatchState..send an array

Hello,

I’m going crazy on a C # topic but maybe you can help me.
In a match I have to send an array of data.

Imagine something like this:

pos x = 10 y = 20 z = 30
pos x = 15 y = 34 z = 10
pos …

This data is sent by each player: indeed each player has many positions.

Looking at Fish’s example the result is easy: data is sent but it is not an array

ex.

var values = new Dictionary <string, string>
         {
             {"velocity.x", velocity.x.ToString ()},
             {"velocity.y", velocity.y.ToString ()},
             {"position.x", position.x.ToString ()},
             {"position.y", position.y.ToString ()}
         };

         return values.ToJson ();

Could you help me?
thank you

I’m not sure I understood the problem you’re having, add the positions to a List and set it as one of the Dictionary values before marshaling and you should be able to send them as JSON.

Hi @sesposito ,

I try to clarify it better.
Each player has 3 or more sub-objects which have their position in the game space.

The first way I thought is to create a dictionary with a “count” key that contains the number of sub-objects and then create as many “position” keys as there are objects.
This solution works but I wanted to understand if there is something more elegant like the use of arrays in JSON.

Example

var values = new Dictionary <string, string>
         {
             {"count.”, items.count.ToString ()},
             {"Position1", items[0].position.x.ToString ()},
             {"Position2", items[1].position.x ToString ()},
             Etc….

Thank you

You need to create a class to represent the json to be serialized, and use a list or an array type to represent your positions, e.g.:

using System;
using System.Collections.Generic;
using System.Text.Json;

class Program {
  public static void Main (string[] args) {
    var pr = new PositionsRepresenter{
      Positions = new List<string>(){"x,y,z", "x,y,z", "x,y,z"}
    };

    var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
    string jsonString = JsonSerializer.Serialize(pr, options);
    
    Console.WriteLine(jsonString);
  }
}

public class PositionsRepresenter {
  public IList<string> Positions { get; set; }
}

Output: {"positions":["x,y,z","x,y,z","x,y,z"]}

See: How to serialize and deserialize JSON using C# - .NET | Microsoft Docs