在反序列化过程中,如何从文件中逐个读取对象



所以我目前有以下代码

if (File.Exists(file))
{
IList<Cart> temp = JsonConvert
.DeserializeObject<IList<Cart>>(File.ReadAllText(file));
foreach (var x in temp)
{
crt.Add(x);
}
}

Cart是基类,DrinksFood是其派生类,具有自己不同的变量。当我使用上面的代码将反序列化的结果存储到crt中时,crt是一个同时包含Drinks和Food对象的cart列表,当我尝试显示cart中的每个项目时,结果变成Cart_Project.Model.Cart,而不是显示其派生类的变量。我试过使用

foreach(var x in temp)
{
if (x is Food)
{
crt.Add(x as Food);
}
else if (x is Drinks)
{
crt.Add(x as Drinks);
}
}

将每个对象添加为自己的派生类,但当我尝试在应用程序上显示它时,什么都不会显示。有没有办法从文件中读取每个对象,并将其存储到自己类的List中?

如果您使类型为父类(在您的示例中为Cart(的集合,则您同意这些对象的类型为Cart,从而丢失子类的细节。您必须决定什么设计是最好的,但需要考虑的一个潜在选项是做一些与让两个类实现一个接口并创建该接口的集合相关的事情。

public interface IConsumables { … }
public class Drinks: IConsumables 
{
public string Name;
public double Volume;
public double Cost;
public double Origin;
public double Calories;
}
public class Food : IConsumables 
{
public string Name;
public double Cost;
public double Origin;
public double Calories;
}

然后使用一些接口的集合

IEnumerable<IConsumables>

最新更新