将混合值 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 列表传递给 MVC 操作

你的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"
    ]
}