Type Object无法转换为某些C类#

时间:2017-11-20 20:20:57

标签: c# casting

下面是一个属性名称为“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);

4 个答案:

答案 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; }