我正在尝试创建一个"图书馆数据库"作为ASP.Net&amp ;;的大学项目的一部分C#,Json用作存储方法。
我是asp.net和c#的完全新手,昨天有人帮我弄清楚如何使用Json数组中的相关数据填充表单中的一系列文本框,当使用该数组中的每个元素进行选择时下拉列表。我们设法让这部分代码启动并运行,但我遇到了新的障碍。
我需要知道如何删除JSON数组中的数据条目。
下面是包含我的Json数组变量的代码
public class Book
{
public string id { get; set; }
public string title { get; set; }
public string author { get; set; }
public string year { get; set; }
public string publisher { get; set; }
public string isbn { get; set; }
public Book(string id, string title, string author, string year, string publisher, string isbn)
{
this.id = id;
this.title = title;
this.author = author;
this.year = year;
this.publisher = publisher;
this.isbn = isbn;
}
}
以下是我的数组的代码
public class BookList
{
public List<Book> bookList { get; set; }
public BookList()
{
bookList = new List<Book>();
}
public object Where(Func<object, bool> p)
{
throw new NotImplementedException();
}
}
以下是CURRENT Json数据
{
"bookList": [
{
"id": "1",
"title": "Harry Potter and the Philosopher's Stone",
"author": "J.K. Rowling",
"year": "1997",
"publisher": "Bloomsbury",
"isbn": "0-7475-3269-9"
},
{
"id": "2",
"title": "The Hobbit",
"author": "J. R. R. Tolkien",
"year": "1937",
"publisher": "George Allen & Unwin",
"isbn": "054792822X"
},
{
"id": "3",
"title": "Nisekoi: False Love",
"author": "Naoshi Komi",
"year": "2014",
"publisher": "Viz",
"isbn": "9781421557991"
}
]
}
以下是我的删除书页的当前代码
public partial class DeleteBook : System.Web.UI.Page
{
public const string FILENAME = @"C:\Users\User\Documents\Assessments\19383038_CSE2ICX_Assignment3\JsonFiles\BookList.Json";
string jsonText = File.ReadAllText(FILENAME);
BookList bookList = new BookList();
public void Page_Load(object sender, EventArgs e)
{
bookList = JsonConvert.DeserializeObject<BookList>(jsonText);
if (!IsPostBack)
{
ddl.DataTextField = "id";
ddl.DataValueField = "id";
ddl.DataSource = bookList.bookList;
ddl.DataBind();
}
var book = bookList.bookList.Where(x => x.id == ddl.SelectedValue).FirstOrDefault();
txtDeleteID.Text = book.id;
txtDeleteTitle.Text = book.title;
txtDeleteAuthor.Text = book.author;
txtDeleteYear.Text = book.year;
txtDeletePublisher.Text = book.publisher;
txtDeleteIsbn.Text = book.isbn;
}
protected void btnDeleteBook_Click(object sender, EventArgs e)
{
// ...
}
protected void btnClearField_Click(object sender, EventArgs e)
{
// ...
}
}
因此,在页面加载中,代码告诉我的表单中的每个文本框,以读取数组中每个变量包含的数据,以及我在下拉列表中选择的ID。
现在我需要做的是删除那些数据而只删除那些数据。我不想具体通过名称来引用数据,因为这个数据库将允许人们输入其他数据,我需要一种方法来确定数据被调用的内容,然后将其删除。这适用于每本书中的所有数据。例如,哈利波特是这个图书馆中列出的一本书,当我点击删除书按钮时,我想要删除有关哈利波特的所有信息。
不幸的是,我没有足够的经验来正确访问JSON中的信息,我已经尝试将数组转换为一个工作但是在这条路上没有任何运气。 .REMOVE函数只允许我处理Int,有人可以帮我解决这个问题,或者理解如何操作这些数据。
对不起,很长的帖子,如果我想要的东西足够清楚,请告诉我,我会尽力解释更详细。提前感谢您收到任何帮助。
答案 0 :(得分:2)
在按钮中点击删除
protected void btnDeleteBook_Click(object sender, EventArgs e)
{
var itemToRemove = bookList.bookList.FirstOrDefault(r => r.id == ddl.SelectedValue);
if(itemToRemove != null)
bookList.bookList.Remove(itemToRemove);
}
这将从bookList中删除所选书籍。现在将列表序列化为json。
string newJsonText = JsonConvert.SerializeObject(bookList);
还将bookList类重命名为其他类,因为bookList.bookList看起来很混乱。也许bookStore左右