我想用文件中的值填充类成员 我正在创建此文件,因此我可以根据需要选择格式。我认为这应该是这样容易阅读:
name,value
name,value
etc.
我和“Car.a”,“Car.b”等成员上课“Car” 例如:
a,5
它应该给我
Car.a = 5;
如何实现这一目标?
答案 0 :(得分:1)
您可以使用Reflection来执行此操作。与XmlSerializer
的作用类似:
此示例适用于大多数基本数据类型:
private void AssignProperty(object obj, string propertyName, string propertyValue)
{
PropertyInfo property = obj.GetType().GetProperty(propertyName);
property.SetValue(obj, Convert.ChangeType(propertyValue, property.PropertyType), null);
}
See it in action on dotNetFiddle
如果您需要更频繁地使用此格式,您当然可以构建自己的Deserializer
:
public class StringLinesDeserializer<T> where T : new()
{
public T Deserialize(string[] assignments)
{
T result = new T();
foreach (string assignment in assignments)
{
int commaPos = assignment.IndexOf(',');
string propertyName = assignment.Substring(0, commaPos);
string propertyValue = assignment.Substring(commaPos + 1);
AssignProperty(result, propertyName, propertyValue);
}
return result;
}
private void AssignProperty(object obj, string propertyName, string propertyValue)
{
PropertyInfo property = obj.GetType().GetProperty(propertyName);
property.SetValue(obj, Convert.ChangeType(propertyValue, property.PropertyType), null);
}
}
可以像这样使用:
string[] assignments = new string[]{"a,5","b,6"};
StringLinesDeserializer<Car> deserializer = new StringLinesDeserializer<Car>();
Car newCar = deserializer.Deserialize(assignments);
答案 1 :(得分:0)
由于您已开放其他方式,我建议您使用Json.Net之类的内容来序列化/反序列化您的对象。这是一个简短的例子:
Car car = new Car { a = 10, name = "Golf" };
var str = JsonConvert.SerializeObject(car);
str
将包含json格式的Car对象的序列化版本,如下所示:
{"a":10,"name":"Golf"}
如果你想从那个JSON字符串重新创建你的对象,那么使用它:
Car deserializedCar = JsonConvert.DeserializeObject<Car>(str);
如果您更喜欢使用XML:
var car = new Car { name = "Hellcat", a = 10 };
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(Car));
string carXml = null;
using (var ms = new System.IO.MemoryStream())
{
serializer.Serialize(ms, car);
carXml = System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
carXml
将包含以下内容:
<?xml version="1.0"?>
<Car xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<a>10</a>
<name>Hellcat</name>
</Car>
答案 2 :(得分:0)
通过关注文本文件内容:
A,20个
B,14
如果您将public class Car
{
public object a { get; set; }
public object b { get; set; }
}
类定义如下:
private Car GetCarFromFile(string strFilePath)
{
var lstCarFile = System.IO.File.ReadAllLines(strFilePath);
var car = new Car();
foreach (var c in lstCarFile)
{
var name = c.Split(',')[0].Trim();
var value = c.Split(',')[1].Trim();
car.GetType().GetProperty(name).SetValue(car, value, null);
}
return car;
}
尝试以下方法:
var car = GetCarFromFile("D:/CarMembersValue.txt");
要调用上述方法,只需传递文本文件的路径参数:
{{1}}