在我的应用中,我收到了服务器的回复。这些回复可以是:
{
"cmd":"read_ack",
"model":"sensor_ht",
"sid":"158d0001a2ddac",
"short_id":36192,
"data":"{\"voltage\":3005,\"temperature\":\"2741\",\"humidity\":\"5828\"}"
}
或者它可以是:
{
"cmd":"read_ack",
"model":"magnet",
"sid":"158d000159febe",
"short_id":40805,
"data":"{\"voltage\":3045,\"status\":\"open\"}"
}
我可以使用“动态”类吗?
我的班级看起来像这样:
public class RootObject
{
public string cmd { get; set; }
public string model { get; set; }
public string sid { get; set; }
public int short_id { get; set; }
public Data data { get; set; }
}
我的数据类看起来像:
public class Data
{
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public int voltage { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string status { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string temperature { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string humidity { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string no_close { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string no_motion { get; set; }
}
我可以为每种类型的响应设置不同的类吗?是否可以动态更改RootObject类中的数据类型?
非常感谢
答案 0 :(得分:0)
您需要How to deserialize a JSON property that can be two different data types using Json.NET中所述的自定义转换器,以及用于更改数据类型的继承。
您可以使用更多派生类型实现的空基类来处理它:
public class RootObject
{
public string cmd { get; set; }
public string model { get; set; }
public string sid { get; set; }
public int short_id { get; set; }
public SensorData data { get; set; }
}
public abstract class SensorData
{
}
public class MagnetData : SensorData
{
public int Voltage { get; set; }
}
public class SomeOtherSensorData : SensorData
{
public bool AnotherProperty { get; set; }
}
然后在您的转换器中,将反序列化为MagnetData
或SomeOtherSensorData
或您想要的任何其他类。
也就是说,您实际上想要为每种类型的数据创建一个类。这有利有弊。
或者,只需将您的data
反序列化为Dictionary<string, object>
,然后按其(字符串)名称提取相关字段。