我正在学习一种新的框架(ASP.NET)及其关联的语言(C#)。这对我来说并不容易,因为我只有Python技能,而且不是面向对象的编程专家。
目标:
通过遵循一些教程,我试图将数据从JSON文件导入到我的模型中。然后,在控制器中,我尝试获取数据并在视图中显示。
我不知道为什么,但是没有显示数据,也没有任何问题。
这是我的模型课:
namespace Blog.Models
{
public class Article
{
public string Pseudo { get; set; }
public string Titre { get; set; }
public string Contenu { get; set; }
}
}
我还有另一个可以从我的文章创建列表的类:
namespace Blog.Models
{
/// <summary>
/// permet de gérer les articles qui sont enregistrés dans un fichier JSON
/// </summary>
public class ArticleJSONRepository
{
/// <summary>
/// Représente le chemin du fichier JSON
/// </summary>
private readonly string _savedFile;
/// <summary>
/// Construit le gestionnaire d'article à partir du nom d'un fichier JSON
/// </summary>
/// <param name="fileName">nom du fichier json</param>
public ArticleJSONRepository(string fileName)
{
_savedFile = fileName;
}
/// <summary>
/// Obtient une liste de tout les articles
/// </summary>
public IEnumerable<Article> GetAllListArticle()
{
using (StreamReader reader = new StreamReader(_savedFile))
{
List<Article> list = JsonConvert.DeserializeObject<List<Article>>(reader.ReadToEnd());
return list;
}
}
}
}
我的JSON文件如下所示(非常简单):
{
"post": {
"Pseudo": { "value": "Clem" },
"Titre": { "value": "mon article" },
"Contenu": { "value": "Du texte, du texte, du texte" }
}
}
然后,我将控制器命名为ArticleController
:
namespace Blog.Controllers
{
public class ArticleController : Controller
{
private readonly ArticleJSONRepository _repository;
public ArticleController()
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data", "articles.json");
_repository = new ArticleJSONRepository(path);
}
// GET: Article
public ActionResult Index()
{
return View("Index");
}
public ActionResult List()
{
try
{
List<Article> liste = _repository.GetAllListArticle().ToList();
Console.WriteLine(liste);
return View(liste);
}
catch
{
return View(new List<Article>());
}
}
}
}
最后,我的视图名为List.cshtml
:
@model IEnumerable<Blog.Models.Article>
@{
ViewBag.Title = "List";
Layout = "~/Views/Shared/__Layout.cshtml";
}
<h2>List</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Pseudo)
</th>
<th>
@Html.DisplayNameFor(model => model.Titre)
</th>
<th>
@Html.DisplayNameFor(model => model.Contenu)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Pseudo)
</td>
<td>
@Html.DisplayFor(modelItem => item.Titre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Contenu)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
</table>
它给了我
如果我删除了try/catch
,就会出现以下问题:
无法反序列化当前JSON对象(例如{“ name”:“ value”}) 进入类型'System.Collections.Generic.List`1 [Blog.Models.Article]' 因为该类型需要JSON数组(例如[1,2,3])进行反序列化 正确地。要解决此错误,请将JSON更改为JSON数组 (例如[1,2,3])或更改反序列化类型,使其成为常规 .NET类型(例如,不是整数之类的原始类型,不是集合 可以从JSON反序列化的类型(如数组或列表) 宾语。也可以将JsonObjectAttribute添加到类型中以强制它 从JSON对象反序列化。路径“ post”,第2行,位置11。
答案 0 :(得分:0)
在您的情况下,您的awk -F"RMK AO2.*SLP" '{$0=$0~FS?$1"RMK AO2 SLP "$2:$0}1' file
KDFW 151753Z 17018G25KT 10SM FEW035 FEW120 SCT250 32/21 A2983 RMK AO2 SLP 093 T03220211 10322 20239 58008
无法反序列化问题中的Model
字符串。我已经为您的JSON
字符串准备了一个反序列化示例。代码如下:
JSON
这将产生以下输出:
using System;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
string json=@"{'post':{'Pseudo':{'value':'Clem'},'Titre':{'value':'mon article'},'Contenu':{'value':'Du texte, du texte, du texte'}}}";
var Sresponse = JsonConvert.DeserializeObject<RootObject>(json);
Console.WriteLine(Sresponse.post.Pseudo.value);
Console.WriteLine(Sresponse.post.Titre.value);
Console.WriteLine(Sresponse.post.Contenu.value);
}
}
public class Pseudo
{
public string value { get; set; }
}
public class Titre
{
public string value { get; set; }
}
public class Contenu
{
public string value { get; set; }
}
public class Post
{
public Pseudo Pseudo { get; set; }
public Titre Titre { get; set; }
public Contenu Contenu { get; set; }
}
public class RootObject
{
public Post post { get; set; }
}
您可以相应地在新的Clem
mon article
Du texte, du texte, du texte
中将输出分配给关联的变量,具体取决于您的实现,并将Model
发送到Model
。
有效的演示在这里:https://dotnetfiddle.net/oCuZND
答案 1 :(得分:0)
当前的问题是您的json文件与您要求JsonConvert生成的数据结构不匹配。尝试使用以下格式的json文件:
[
{
"Pseudo":"quelque_chose_1",
"Titre":"quelque_chose_2",
"Contenu":"quelque_chose_3"
},
{
"Pseudo":"quelque_chose_1",
"Titre":"quelque_chose_2",
"Contenu":"quelque_chose_3"
}
]