下面是一个属性名称为“d”且类型为object
的类ran.nextInt(10) + 1
现在,我将JsonResult作为
返回public class JsonRow
{
public bool check { get; set; }
public string col0 { get; set; }
public string col1 { get; set; }
public string col2 { get; set; }
public object d { get; set; }
public string sender { get; set; }
}
//Any generic class
public class MyClass {
public string Property1 { get; set; }
public string Property2 { get; set; }
}
List<JsonRow> dataRows { get; set; }
dataRows = new List<JsonRow>();
dataRows.Add(new JsonRow() {
col0 = "A",
col1 = "B",
d = new MyClass() {
Property1="SomeValue",
Property2="XYZ" }
});
直到这里,一切都很好,
问题:当我将这个Json对象从Angular发布回Controller时,属性“d”无法转换为MyClass
return Json(dataRows , JsonRequestBehavior.DenyGet);
答案 0 :(得分:1)
在Angular通过WEB API返回的值中,C#现在无法将d变量强制转换为MyClass。
尝试使用:
MyClass myclass= JsonConvert.DeserializeObject<MyClass>(item.d);
答案 1 :(得分:0)
您可以使用as
关键字向下转发。
var mycls = item.d as MyClass;
if(mycls != null)
{
//Do Something
}
如果mycls
为空,则类型不正确。
答案 2 :(得分:0)
您应将自己的财产d
声明为MyClass
而不是object
public MyClass d { get; set; }
在案例中,您希望该属性不是MyClass
并且可以是任何提供的类型,然后可能使用泛型
public class JsonRow<T>
{
public T d { get; set; }
}
答案 3 :(得分:0)
尝试通过声明类型为MyClass的d属性使编译器变得简单直接,然后d将能够从新的MyClass中获取分配的属性而不会出现错误
public MyClass d { get; set; }