我有一个给我一个JSON字符串的事件:
...
public delegate void DataReceivedHandler(string jsonString);
...
public event DataReceivedHandler OnDataReceived = null;
...
if(OnDataReceived != null)
{
OnDataReceived(jsonString);
}
...
该JSON字符串可以是3个不同的复杂对象之一:LogOnMessage,LogOffMessage或DataRequest。每条消息都有一组唯一的字段和属性。
如何确定JSON字符串解析为哪种对象类型?
我知道我可以编写一个循环遍历JObject的JProperty.Name并通过迭代我的对象集合及其元数据来查找匹配的方法,但我的直觉告诉我这是一个需要解决的常见挑战所以它必须内置于Newtonsoft JSON .NET的某个地方,我只是忽略或不理解。它可能比我的解决方案更好,更快......
答案 0 :(得分:2)
我终于能够通过使用JObjects和JsonSchemas来检测对象类型。
我采取的步骤:
请注意:上述方法已移至单独的Newtonsoft.Schema库。所以我的建议是利用最新最好的图书馆。
private Newtonsoft.Json.Schema.JsonSchema _schema;
public static Newtonsoft.Json.Schema.JsonSchema Schema
{
get
{
if (_schema == null)
{
Newtonsoft.Json.Schema.JsonSchemaGenerator generator = new Newtonsoft.Json.Schema.JsonSchemaGenerator();
_schema = generator.Generate(typeof(DataResponse));
}
return _schema;
}
}
...
Newtonsoft.Json.Linq.JObject message = Newtonsoft.Json.Linq.JObject.Parse(json);
if(Newtonsoft.Json.Schema.Extensions.IsValid(message, DataResponse.Schema))
{...}
else if (Newtonsoft.Json.Schema.Extensions.IsValid(message, ServerStatus.Schema))
{...}
...