“对象”不包含“名称”的定义
问题描述:
我正在使用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>
预先感谢您的帮助
答
您可以通过三种方式做到这一点,第一个是通过改变从对象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
答
最明显的问题是,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
答
你要的GetBasic
返回类型更改为GetData
得到的定义。
public GetData GetBasic() {
string json = @"{
'Name': 'Bad Boys',
'ReleaseDate': '1995-4-7T00:00:00'}";
return JsonConvert.DeserializeObject<GetData>(json);
}
您是使用完整的MVC还是WebMatrix? – CodeCaster
你可以改善你的命名。 'GetData'通常不会形成一个好的类名。它更适合于一种方法,因为如果包含一个动作(“get”)。最好给你的班级命名,以便它描述实际的模型。在你的情况下,可能是像'专辑'或'书'(或任何它有一个发布日期)。 –