【发布时间】:2015-03-23 02:26:57
【问题描述】:
使用 C# 尤其是 JSON.net 如何处理可以具有动态值的 JSON 对象。例如:
{ "message_id":"123-456", “数据”:[“数据”,“列表”], “类型”:“MSG_TYPE1” }
{ "message_id":"123-457", "data":"我的数据字符串", “类型”:“MSG_TYPE2” }
{ "message_id":"123-458", "数据":{"key1":"value1","key2":"value2"}, “类型”:“MSG_TYPE3” }
“数据”值可以是任何类型。在 C# 中,我定义了一个包含这些属性的 ServiceMessage 类,但“数据”应该是什么类型的属性。我正在查看 JToken 或 JContainer,但我不确定实现的最佳方式。
public class ServiceMessage
{
public string message_id { get; set; }
public JContainer data { get; set; }
public string type { get; set; }
public string getJSON()
{
string json = JsonConvert.SerializeObject(this);
return json;
}
public void setJSON(string json)
{
dynamic jsonObj = JsonConvert.DeserializeObject(json);
this.message_id = jsonObj.message_id;
this.type = jsonObj.type;
this.data = // what goes here.
}
}
【问题讨论】:
-
您知道它们在编译时数据对象的实际结构还是每条消息都包含不同的值?您希望如何查找数据值?
-
我会根据消息类型知道数据对象的实际结构。如果我知道消息是 MSG_TYPE1 那么我就会知道对象结构。
-
@Huge 在不知道您计划访问该对象的确切方式的情况下,拥有一个强类型对象有点困难,您可以使用泛型做一些事情,但我很确定它会造成比它更多的麻烦值得。一旦数据通过网络传输,您希望如何访问数据?