0

I'm very new to C# so please excuse me if i am asking silly question. I am using Newtownsoft json. (https://www.newtonsoft.com/json)

Here is my code:

public void SpawnPlayer(Dictionary<string, string> playerData, int cnnId)    
{

    string jsonData = JsonConvert.SerializeObject(playerData, Formatting.None);
    Console.WriteLine(jsonData);
}

Here is what jsonData contains:

{"1":"{\r\n \"characterId\": 1,\r\n \"connectionId\": 1,\r\n \"accountId\": 1,\r\n \"name\": \"Riorage\",\r\n \"level\": 2,\r\n \"characterRace\": 1,\r\n \"characterClass\": 1,\r\n \"characterPosition\": {\r\n \"x\": \"15.42661\",\r\n \"y\": \"7.477493\",\r\n \"z\": \"-32.30045\",\r\n \"map\": 1\r\n },\r\n \"characterRotation\": {\r\n \"x\": \"1\",\r\n \"y\": \"203\",\r\n \"z\": \"1\"\r\n },\r\n \"charactrerInstance\": {\r\n \"instanceId\": 0,\r\n \"groupId\": 0\r\n },\r\n \"characterState\": 1,\r\n \"characterMovementState\": 0,\r\n \"characterActionState\": 1,\r\n \"characterEmotionState\": 1,\r\n \"lastOnline\": \"5.4.2018 г. 14:59:16\",\r\n \"onlineTime\": \"1\"\r\n}"}

I would like to know how can i reach the value of 1,CharacterPosition,x.

I want to give these keys and receive an output 15.42661

Is it even possible and if so how ?

Venelin
  • 2,905
  • 7
  • 53
  • 117
  • You migth be interested to check this way https://stackoverflow.com/questions/6620165/how-can-i-parse-json-with-c/17842600#17842600 – Dmitry Pavlov Apr 05 '18 at 13:48

2 Answers2

0

You can try with below one:

string jsonData = JsonConvert.SerializeObject(playerData, Formatting.None);
var data = JsonConvert.DeserializeObject<dictionary<string,dictionary<string,object>>>(jsonData);
var x = data["1"]["CharacterPosition"].x;
Console.WriteLine(x);
0

A similar way than what @Aman suggested, but letting dynamic handle the type on runtime:

dynamic d = JsonConvert.DeserializeObject("{'1':{'characterId':1,'connectionId':1,'accountId':1,'name':'Riorage','level':2,'characterRace':1,'characterClass':1,'characterPosition':{'x':'15.42661','y':'7.477493','z':'-32.30045','map':1},'characterRotation':{'x':'1','y':'203','z':'1'},'charactrerInstance':{'instanceId':0,'groupId':0},'characterState':1,'characterMovementState':0,'characterActionState':1,'characterEmotionState':1,'lastOnline':'5.4.2018г.14:59:16','onlineTime':'1'}}");

Console.Write(d["1"].characterPosition.x);

But, you could always create you own class and call DeserializeObject<Class>

Edit: Check out this class generator

Luis Lavieri
  • 4,064
  • 6
  • 39
  • 69