C# 将JSON反序列化到对象

C# 将JSON反序列化到对象,c#,json,javascriptserializer,C#,Json,Javascriptserializer,我正在接收JSON,需要反序列化。我正在使用JavaScriptSerializer来实现这一点。 例如物体 class Player { public string name{ set; get; } public float yPos { set; get; } public float xPos { set; get; } } class Communication { public string i

我正在接收JSON,需要反序列化。我正在使用JavaScriptSerializer来实现这一点。
例如物体

class Player
    {
        public string name{ set; get; }
        public float yPos { set; get; }
        public float xPos { set; get; }
    }

class Communication
    {
        public string id{ set; get; }
        public string message{ set; get; }
        public string status{ set; get; }
    }
例如JSON:

var json1 = "[{\"name\":\"Master\",\"xPos\":\"34.67\",\"yPos\":\"85.36\"}, {\"name\":\"Puppet\",\"xPos\":\"19.56\",\"yPos\":\"75.19\"}]";

var json2 = "[{\"id\":\"5697862\",\"message\":\"Hello\",\"status\":\"85.36\"}, {\"id\":\"4698458\",\"message\":\"Hi\",\"status\":\"75.19\"}]";
反序列化程序方法:

private static List<T> Deserialize<T>(string json)
        {
            var s = new System.Web.Script.Serialization.JavaScriptSerializer();
            List<T> obj = s.Deserialize<List<T>>(json);
            return obj;
        }
私有静态列表反序列化(字符串json)
{
var s=new System.Web.Script.Serialization.JavaScriptSerializer();
List obj=s.Deserialize(json);
返回obj;
}

但问题是,我收到了两种不同类型的JSON消息。那么,我如何确定需要反序列化哪个对象呢

我建议看一下(它也可以反序列化)。该类确保在分别对JSON进行序列化和反序列化时遵循特定的约定

对于反序列化,其工作原理如下:

stream1.Position = 0;
Person p2 = (Person)ser.ReadObject(stream1);
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);
序列化的工作原理如下:

stream1.Position = 0;
Person p2 = (Person)ser.ReadObject(stream1);
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);

有关更多说明,请参阅链接。

您可以动态处理结果,而不是反序列化到特定类

var js = new JavaScriptSerializer();
dynamic dynObj =  js.DeserializeObject(jsonN);
foreach (var obj in dynObj)
{
    if (obj.ContainsKey("name")) Console.WriteLine(obj["name"]);
    else Console.WriteLine(obj["message"]);
}

说得好!不管怎样,我用另一种方法回答OP,因为谁知道使用的是哪个.NET版本,谁知道他是否可以使用
DataContractJsonSerializer
…也许你会指出
Person
或任何可序列化的类都应该用适当的属性标记该类及其相关属性,以便让这项工作正常进行。它如何有助于确定我收到了哪些JSON?我仍然会有同样的问题决定反序列化的人或媒体的例子。太棒了!你是国王!谢谢