假设我有一个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*
的文档结构事先未知,唯一知道的是req1
和req2
的结构相似,resp1
和resp2
也是如此。
换句话说,我正在寻找一种灵活的模式识别,它将通过识别初始req1
/resp1
对中出现的字段来"学习",然后能够通过对resp1
的副本进行适当的替换来响应未来的req*
输入。
这是已经存在的东西吗?如果没有,如何在JSON.Net
中实现?
我会先将您的请求反序列化为单独的对象。然后,您可以使用反射来获得每个对象的所有属性的列表,并过滤结果以仅显示公共属性。
obj.GetType().GetProperties();
一旦在响应对象中有了所需的属性列表,就可以创建一个新的ExpandoObject
,并动态添加所需的特性和相应的值。
dynamic x = new ExpandoObject();
x.NewProp = string.Empty;
完成后,您可以将此响应对象序列化回JSON。