将混合值 Json 列表传递给 MVC 操作
本文关键字:MVC 操作 列表 混合 Json | 更新日期: 2023-09-27 18:36:08
我有这个Json:
{
'TypeName': 'MyType',
'Values':
{
value1: 12,
value2: 'asdf',
value3: 32.2
}
}
这些值可以是字符串或数字,并且未设置值的数量(因此可以是 3,也可以是 5 或 12)。我在 MVC 中有一个方法:
class CoolObject{
public string TypeName { get; set; }
public ?????? Values { get; set; }
}
[HttpPost]
public ActionResult DoStuff(CoolObject values){
//Do cool stuff with cool object
}
CoolObject 应该包含什么类型的对象才能正常工作?
你的JSON不是一个有效的JSON,它应该看起来像这样:
{
"TypeName": "MyType",
"Values": {
"value1": 12,
"value2": "asdf",
"value3": 32.2
}
}
或者你可以在那里有数组。但让我们假设它是这样的。然后,您可以尝试使用此类:
class CoolObjectValues
{
public object value1 { get; set; }
public object value2 { get; set; }
public object value3 { get; set; }
}
class CoolObject
{
public string TypeName { get; set; }
public CoolObjectValues Values { get; set; }
}
请注意,当您想要处理 CoolObjectValues 中的值时,您需要确定值类型是什么。为此,您可以执行以下操作:
int intValue;
if (int.TryParse(co.Values.value1.ToString(), out intValue))
{
// it was int and you now have its value in intValue
}
else
{
// it was string
}
更新:
对于不确定数量的值:
{
"TypeName": "MyType",
"Values": {
"value1": 12,
"value2": "asdf",
"value3": 32.2,
...
}
}
您的类将如下所示:
class CoolObject
{
public string TypeName { get; set; }
public Dictionary<string, object> Values { get; set; }
}
你可以像这样使用它:
CoolObject co = JsonConvert.DeserializeObject<CoolObject>(jsonData);
foreach (KeyValuePair<string, object> kvp in co.Values)
Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);
您可以将整数作为字符串发送,然后在服务器端使用逻辑来强制转换它们以确定它们是否为数字,如果是,则将它们转换为正确的类型。
// Server-side CLR object
class CoolObject
{
public string TypeName { get; set; }
public IEnumerable<string> Values { get; set; }
}
// Client-side JSON sent to the server
{
TypeName: "MyType",
Values: [
"12",
"asdf",
"32.2"
]
}