https://stackoverflow.com/questions/63771157/how-to-access-json-data-without-unknown-key

CSharp · Console

/Program.cs

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class Data
{
        public string assetName{get;set;}			//'assetName': 'avatar',
        public string id{get;set;}					//'id': '-M4qRmfnFya7bC43Ujye',
        public string imageName{get;set;}			//'imageName': 'icon_avatar',
        public string name{get;set;}				//'name': 'Bob',
        public string objName{get;set;}				//'objName': 'Bobby',
        public string point{get;set;}				//'point': '-M4vZRY9vhKs65n5L_Gk',
        public string versionNumber{get;set;}		//'versionNumber': '3'
}
					
public class Program
{
	public static JToken DeserializeAndCombineDuplicates(JsonTextReader reader)
	{
		if (reader.TokenType == JsonToken.None)
		{
			reader.Read();
		}

		if (reader.TokenType == JsonToken.StartObject)
		{
			reader.Read();
			JObject obj = new JObject();
			while (reader.TokenType != JsonToken.EndObject)
			{
				string propName = (string)reader.Value;
				reader.Read();
				JToken newValue = DeserializeAndCombineDuplicates(reader);

				JToken existingValue = obj[propName];
				if (existingValue == null)
				{
					obj.Add(new JProperty(propName, newValue));
				}
				else if (existingValue.Type == JTokenType.Array)
				{
					CombineWithArray((JArray)existingValue, newValue);
				}
				else // Convert existing non-array property value to an array
				{
					JProperty prop = (JProperty)existingValue.Parent;
					JArray array = new JArray();
					prop.Value = array;
					array.Add(existingValue);
					CombineWithArray(array, newValue);
				}

				reader.Read();
			}
			return obj;
		}

		if (reader.TokenType == JsonToken.StartArray)
		{
			reader.Read();
			JArray array = new JArray();
			while (reader.TokenType != JsonToken.EndArray)
			{
				array.Add(DeserializeAndCombineDuplicates(reader));
				reader.Read();
			}
			return array;
		}

		return new JValue(reader.Value);
	}	
	private static void CombineWithArray(JArray array, JToken value)
	{
		if (value.Type == JTokenType.Array)
		{
			foreach (JToken child in value.Children())
				array.Add(child);
		}
		else
		{
			array.Add(value);
		}
	}	
	
	public static void Main()
	{
		var json=@"
{
    '-M4qRmfIqhKdy643Ujye': {
        'assetName': 'avatar',
        'id': '-M4qRmfnFya7bC43Ujye',
        'imageName': 'icon_avatar',
        'name': 'Bob',
        'objName': 'Bobby',
        'point': '-M4vZRY9vhKs65n5L_Gk',
        'versionNumber': '3'
    },
    '-M4qRmfIqhKdy643Ujye': {
        'assetName': 'avatar',
        'id': '-M4qRmfnFya7bC43Ujye',
        'imageName': 'icon_avatar',
        'name': 'Bobfds',
        'objName': 'Bobbydsf',
        'point': '-M4vZRY9vhKs65n5L_Gk',
        'versionNumber': '3'
    },
    '-M4qRmfIqhKdy643Ujye': {
        'assetName': 'avatar',
        'id': '-M4qRmfnFya7bC43Ujye',
        'imageName': 'icon_avatar',
        'name': 'Bobfdsa',
        'objName': 'Bobbyfc',
        'point': '-M4vZRY9vhKs65n5L_Gk',
        'versionNumber': '3'
    }
}
";
		using (StringReader sr = new StringReader(json))
        using (JsonTextReader reader = new JsonTextReader(sr))
        {
            var parsed = DeserializeAndCombineDuplicates(reader).ToObject<Dictionary<string, Data[]>>();
			
            if(parsed!=null)
			{
				parsed
					.ToList()
					.ForEach(x=>Console.WriteLine("\r\nkey={0}\r\nvalues:\r\n{1}"
										, x.Key
										, string.Join("\r\n", x.Value
													  .Select(z=>string.Join("\t\t", z.name, z.id, z.objName))
													  .ToArray())));
			} else Console.WriteLine("No way, dude!");
        }
		
	}
}
;