“对象”不包含“名称”

时间:2016-08-22 13:58:54

标签: c# asp.net-mvc

我正在使用Json.Net软件包,我的问题是,当我想获取索引的值时,它会给我一个错误,例如“'对象'不包含'名称'的定义”

这是我的GetData.cs文件内容:

using System;
using System.Web;
using System.Net;
using Newtonsoft.Json;

public class GetData
{
    public string Name{set;get;}
    public string ReleaseDate{set;get;}

    public object GetBasic(){

        string json = @"{
          'Name': 'Bad Boys',
          'ReleaseDate': '1995-4-7T00:00:00'}";

        GetData Data = JsonConvert.DeserializeObject<GetData>(json);
        return Data;

    }

}

这是我的test.cshtml文件内容:

@{
    GetData Data = new GetData();
    var objects = Data.GetBasic();
}

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        @objects.Name
    </body>
</html>

提前感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您必须将GetBasic的返回类型更改为GetData才能获得定义。

public GetData GetBasic() {

    string json = @"{
      'Name': 'Bad Boys',
      'ReleaseDate': '1995-4-7T00:00:00'}";

    return JsonConvert.DeserializeObject<GetData>(json);

}

答案 1 :(得分:0)

显而易见的问题是GetBasic()的返回类型是object。因此,将其更改为实际类型:

public GetData GetBasic()
{
   // ...
}

但是,您似乎绕过了适用于OO,C#和MVC的所有构造。你尤其不应该在你的视图中做这项工作,而是在控制器中,你应该用模型注释装饰你的视图。

所以控制器看起来像这样:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var data = new GetData().GetBasic();
        return View(data);
    }

}

这样的观点:

@model GetData

...

        @objects.Name

答案 2 :(得分:-1)

您可以通过三种方式执行此操作,第一个是通过将GetBasic的返回类型从对象更改为GetData,然后方法的签名将如下所示以下内容:

public GetData GetBasic()
{
   // do Something here
}

在这种情况下,您无需再更改任何内容,您的代码将按预期正常工作。

第二个选项为您更改方法调用而不更改方法定义,如下所示:

GetData objects = (GetData)Data.GetBasic();

GetData会有一个名为Name的字段。

第三个选项是将GetBasic作为构造函数,如下所示:

public object GetData()
{    
     string json = @"{'Name': 'Bad Boys','ReleaseDate': '1995-4-7T00:00:00'}";    
     GetData Data = JsonConvert.DeserializeObject<GetData>(json);
     return Data;
}

这样你就可以这样使用:

 GetData DataObjects = new GetData();
 // DataObjects.Name will have the expected value