如何使用此代码并使其更具动态性?
现在我必须将JSON发布为
{ values: [{Key: 'MyKey', Value: 'MyValue'}] }
理想情况下,我想发布JSON,如:
{ values: [{Make: 'Car', Color: 'Red'}] }
OR
{ values: [{FirstName: 'George', LastName: 'Constanza'}] }
所以基本上我与我的JSON中使用Key / Value有关。
如何在不使用键/值的情况下动态加载值?
public class MyPerformerController : ApiController
{
[HttpPut("update/{myPath}")]
public Task<IActionResult> DoSomething(string myPath, [FromBody]MyCollection values)
{
foreach (var val in value)
{
var keyValue = val.Key;
var someValue = val.Value;
}
}
}
public class MyCollection : IEnumerable<KeyValuePair<string,string>>
{
public IEnumerable<KeyValuePair<string, string>> Values { get; set; }
public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
{
return Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
答案 0 :(得分:0)
尝试使用动态类型的FromBody
。请参阅以下示例:
[HttpPost]
[Route("api/webs/")]
public HttpResponseMessage RouteGetWebList([FromBody]dynamic values)
{
string myVar = (string)values["myJSONVariable"].Value;
// go on with myVar...
}
答案 1 :(得分:0)
如果你有这种结构:
[{FirstName: 'George', LastName: 'Constanza'}]
您可以使用JArray
JsonConvert.DeserializeObject<JArray>(json);
例如,有这个json:
[
{
FirstName: "George",
LastName: "Constanza"
}, {
FirstName: "Mike",
LastName: "Passant"
}, {
FirstName: "John",
LastName: "Connor"
}
]
您可以迭代并获取Key
和Value
:
JArray jsonArray = JsonConvert.DeserializeObject<JArray>(json);
foreach (JObject item in jsonArray.Children<JObject>())
{
foreach (JProperty element in item.Properties())
{
Console.WriteLine(string.Format("Key: {0}", element.Name));
Console.WriteLine(string.Format("Value: {0}", element.Value.ToString()));
}
}
在这里,您可以看到 Demo 。
答案 2 :(得分:0)
我相信如果您将其声明为List<IDictionary<string,string>> values
,您将获得与您想要的数据结构相似的数据结构。你可以访问list[0]["FirstName"]
或类似的地方。