2016-08-22 5 views
0

Я использую пакет Json.Net, и моя проблема в том, когда я хочу получить значение индекса, он дает мне ошибку, как этот «объект» не содержит определение 'Имя'»«object» не содержит определения для «Name»

вот мое содержание 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> 

заранее спасибо за помощь

+0

Вы используете полномасштабный MVC или WebMatrix? – CodeCaster

+0

Вы можете улучшить свое именование. 'GetData' обычно не делает для хорошего имени класса. Он больше подходит для метода, потому что если содержит действие («get»). Лучше назвать свой класс так, чтобы он описывал реальную вещь, которая является моделями. В вашем случае это может быть что-то вроде «Album» или «Book» (или что бы то ни было, у которого есть дата выпуска). –

ответ

-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 
0

Очевидной проблемой является GetBasic() «s тип возврата есть 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 
1

Вы должны изменить тип возвращаемого GetBasic к GetData, чтобы получить определение.

public GetData GetBasic() { 

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

    return JsonConvert.DeserializeObject<GetData>(json); 

} 
Смежные вопросы