根据 C# 中的 JSON 内容将 JSON 反序列化为不同的对象类型

Deserialize JSON to different Object Types based on JSON content in C#

因此,我开发了一个由 IoT Hub 触发的 Azure Function,以便从设备接收消息。 我想将它们(从设备收到的消息作为 JSON)反序列化为不同的对象类型(obs。我不允许更改消息的语法)。有没有一种方法可以根据我收到的消息反序列化为正确的对象类型?

其中:

class ReadResponseMessage  {
     
      [JsonProperty("device_id")]
      public string DeviceID {get; set;}

      [JsonProperty("message_id")]
      public int MessageID {get; set;}

      [JsonProperty("port")]
      public int Port{get; set;}

      [JsonProperty("portValue")]
      public bool PortValue {get; set;}

      [JsonProperty("time")]
      public DateTime Time {get; set;}

      [JsonProperty("response_status")]
      public string ResponseStatus{get; set;}
 
}

并且:

class EventMessage {

      [JsonProperty("device_id")]
      public string DeviceID {get; set;}

      [JsonProperty("message_id")]
      public int MessageID {get; set;}

      [JsonProperty("port1")]
      public bool Port1{get; set;}

      [JsonProperty("port2")]
      public bool Port2 {get; set;}

      [JsonProperty("time")]
      public DateTime Time {get; set;}

      [JsonProperty("response_status")]
      public string ResponseStatus{get; set;}

}
string JsonMessageFromDevice = "{"device_id":"DeviceTest","message_id":0,"port":3,"portValue":false,"time":"2021-08-25 10:18:51","response_status":"Send"}";

var oMycustomclassname = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(JsonMessageFromDevice);

var jobject = JObject.Parse(JsonMessageFromDevice);
   var result = jobject["port"];
   if (result != null)
   {
       ReadResponseMessage readResponseMessage = jobject.ToObject<ReadResponseMessage>();
   }
   else
   {
       EventMessage eventMessage = jobject.ToObject<EventMessage>();
   }

或更改模型

class ReadResponseMessage  {
     
      [JsonProperty("device_id")]
      public string DeviceID {get; set;}

      [JsonProperty("message_id")]
      public int MessageID {get; set;}

      [JsonProperty("port")]
      public Dictionary<String,bool> Port{get; set;} // or List<string> port

      [JsonProperty("time")]
      public DateTime Time {get; set;}

      [JsonProperty("response_status")]
      public string ResponseStatus{get; set;}
 
}