我正在尝试创建一个方法,该方法将列表中的文件位置作为参数,并返回该用户定义类型的列表。我已经创建了一个返回类型属性的方法,但我想使用属性的名称来尝试将它们匹配到.json
文件中的键。
我已经让代码工作了,但是只有明确说明了类型。我有一个名为Item
的用户定义类型,如下所示:
public class Item
{
public int ID { get; set; }
public string Name { get; set; }
public double Weight { get; set; }
public int Value { get; set; }
public Item(int id, string name, double weight, int value)
{
ID = id;
Name = name;
Weight = weight;
Value = value;
}
}
这很好,但在某些时候,我可能希望对另一个用户定义类型的列表使用相同的过程,例如:
public class Car
{
public string Registration { get; set; }
public string Model { get; set; }
public float TopSpeed { get; set; }
public Item(string registration, string model, float topSpeed, int value)
{
Registration = registration;
Model = model;
TopSpeed = topSpeed;
}
}
这可能还是我错过了什么?我是否必须创建一个重复的方法,唯一不同的是列表的类型?这是我的代码的一部分,我希望解释我想要实现的目标:
using System.Collections;
using System.Collections.Generic;
using LitJson;
using System.IO;
using System;
using System.Linq;
using System.Reflection;
namespace Program
{
class MainClass
{
public static void Main(string[] args)
{
DataParser dataParser = new DataParser();
List<Item> database = new List<Item>();
string location = "/Items.json";
database = dataParser.ConstructItemDatabase(database, location);
}
}
public class DataParser
{
public List<IndefiniteType> ConstructItemDatabase(List<IndefiniteType> list, string fileLocation)
{
//search property names of the list type and add create new objects within the list, based on the file.
return list;
}
}
}
非常感谢。
答案 0 :(得分:1)
我真的不明白你如何使用input
,但你可以使用通用方法来实现你想要的目标:
$('#documentlist').on('input', '.selectdocument', function () {
alert($(this).closest('.col-lg-12').attr('id'));
});
fileLocation
是您想要的类型的占位符。
public static List<T> ConstructItemDatabase<T>(List<T> list, string fileLocation) where T : new()
{
// add new Item
list.Add(new T());
// if you need a list of all the properties:
PropertyInfo [] allProperties = typeof(T).GetProperties();
return list;
}
将类型限制为仅具有无参数构造函数的类型。所以你可以肯定,可以创建一个新的实例
答案 1 :(得分:1)
您可能正在寻找Generics和Newtonsoft JS序列化器:
public class DataParser
{
// to deserialize database from file
public T ConstructItemDatabase<T>(string fileLocation)
{
var json = File.ReadAllText(fileLocation);
return JsonConvert.DeserializeObject<T>(json);
}
// to serialize (save) database to a file
public void SaveItemDatabaseToJson<T>(string fileLocation, T database)
{
var json = JsonConvert.SerializeObject(database);
File.WriteAllText(fileLocation, json);
}
}
使用示例:
var parser = new DataParser();
parser.SaveItemDatabaseToJson("myDb.json", myListToSerialize);
var myDesirializedList = parser.ConstructItemDatabase<List<Car>>("myDb.json");
P.S。
通过打开Nuget包管理器并在nuget.org上搜索它,将Newtonsoft.Json
库添加到您的项目中。