c# - c# 将 JSON 反序列化为 3 个类
问题描述
我在这个问题上花了2天,仍然没有解决这个问题......
Json 来自 Firebase 实时数据库。
我的绝对目标是将密钥(Zaptec)作为类中的名称,而不必创建“名称”属性。但这是我另一天的问题。
我的输出:
Name = My Watchlist
Stocks = Models.StocksModel(但值为 null)
{
"name": "My Watchlist",
"stocks": {
"Zaptec": {
"avgPrice": "2,14",
"name": "Zaptec",
"shares": 121
}
}
}
public class WatchlistModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged("Name"); }
}
private StocksModel _stocks;
public StocksModel Stocks
{
get { return _stocks; }
set { _stocks = value; OnPropertyChanged("Stocks"); }
}
}
public class StocksModel : INotifyPropertyChanged
{
private StockModel _stocks;
public StockModel Stocks
{
get { return _stocks; }
set { _stocks = value; OnPropertyChanged("Stocks"); }
}
}
public class StockModel : INotifyPropertyChanged
{
#region -- Properties --
private string _name;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged("Name"); }
}
private string _avgPrice;
public string AvgPrice
{
get { return _avgPrice; }
set { _avgPrice = value; OnPropertyChanged("AvgPrice"); }
}
private string _shares;
public string Shares
{
get { return _shares; }
set { _shares = value; OnPropertyChanged("Shares"); }
}
}
解决方案
您的模型应如下所示:
public class WatchlistModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged("Name"); }
}
private Dictionary<string, StockModel> _stocks;
public Dictionary<string, StockModel> Stocks
{
get { return _stocks; }
set { _stocks = value; OnPropertyChanged("Stocks"); }
}
}
您不需要 StocksModel...您需要 StockModel 字典。至于这将如何与 INotifyPropertyChanged 一起工作,那就是另一回事了。但是对于 json,正确的模型是这个答案中显示的。
你应该能够做类似 JsonConvert.Deserialize(jsonString)
此外,作为触发 OnPropertyChanged 事件之前的建议,您应该检查该值是否实际更改。就像是:
if(_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
最后,您的 OnPropertyChanged 实现应该使用“Caller”属性,这样您就不必像“Name”一样硬编码属性名称。
推荐阅读
- c - GCC 的未优化 asm 在汇编中添加两个短整数是做什么的?
- sql - SQL按多列以不同顺序排序后选择奇数行
- python - 选项卡式 tkinter GUI 中小部件的均匀水平间距
- html - 将视频从谷歌驱动器嵌入网站想要添加按钮以提高播放速度
- pytorch - 使用 torch 或 torchvision,我如何调整和裁剪图像批次,并获得调整大小和新图像?
- sql - 使用 golang 和 squirrel 插入 SQL 查询抛出错误。在哪里或附近出现 SQL 错误
- linear-algebra - 将三条相交线拟合到平面数据
- android - Xamarin Forms / Mobile Blazor Bindings - 图像未显示在 iOS 应用程序中,但在 Android 应用程序中很好
- amazon-web-services - 有没有办法将现有 AppSync API 从源代码控制推送到具有新端点的全新 API?
- python - 在 pytorch 中绘制转换(增强)图像