JSON模式识别



假设我有一个JSON请求体req1,它产生了一个JSON响应resp1,其中一些键值与req1中的键值相同。现在假设我有另一个JSON请求req2,我想构建一个JSON响应resp2,它是resp1的副本,但其中公共键的值被req2的值替换。

可以使用什么策略来解决这个问题?

作为一个具体的例子,假设req1是这样的:

{"Name":"Alan"}

假设这是resp1:

{"output":{"Name":"Alan", "Cat": "12"}}

请注意,"Name":"Alan"同时出现在两者中。

如果req2是这样的:

{"Name":"Bancorp"}

然后我想从resp1创建resp2,如下所示:

{"output":{"Name":"Bancorp", "Cat": "12"}}

至关重要的是,req*resp*的文档结构事先未知,唯一知道的是req1req2的结构相似,resp1resp2也是如此。

换句话说,我正在寻找一种灵活的模式识别,它将通过识别初始req1/resp1对中出现的字段来"学习",然后能够通过对resp1的副本进行适当的替换来响应未来的req*输入。

这是已经存在的东西吗?如果没有,如何在JSON.Net中实现?

我会先将您的请求反序列化为单独的对象。然后,您可以使用反射来获得每个对象的所有属性的列表,并过滤结果以仅显示公共属性。

obj.GetType().GetProperties();

一旦在响应对象中有了所需的属性列表,就可以创建一个新的ExpandoObject,并动态添加所需的特性和相应的值。

dynamic x = new ExpandoObject();
x.NewProp = string.Empty;

完成后,您可以将此响应对象序列化回JSON。

相关内容

  • 没有找到相关文章

最新更新