クラスメンバーをファイルの値で埋めたいと思います。
このファイルを作成していますので、必要に応じて書式を選択できます。私はそれが読みやすいように、このようにする必要がありますことを考えた:ファイルからクラスメンバーを埋める方法
私は、「Car.a」などのメンバーと「Car.bを」クラス「車」を持っているなど
例えば:
a,5
それは、これを達成するためにどのように
Car.a = 5;
私に
を与える必要がありますか?
クラスメンバーをファイルの値で埋めたいと思います。
このファイルを作成していますので、必要に応じて書式を選択できます。私はそれが読みやすいように、このようにする必要がありますことを考えた:ファイルからクラスメンバーを埋める方法
私は、「Car.a」などのメンバーと「Car.bを」クラス「車」を持っているなど
例えば:
a,5
それは、これを達成するためにどのように
Car.a = 5;
私に
を与える必要がありますか?
これを行う他の方法がありますので、Json.Netのようなものを使用してオブジェクトをシリアル化/逆シリアル化することをお勧めします。ここでは簡単な例です:
Car car = new Car { a = 10, name = "Golf" };
var str = JsonConvert.SerializeObject(car);
str
は次のようになりますJSON形式であなたの車のオブジェクトのシリアル化されたバージョンが含まれます:
{"a":10,"name":"Golf"}
をそして、あなたは戻っているJSON文字列から、あなたのオブジェクトを再作成したい場合
Car deserializedCar = JsonConvert.DeserializeObject<Car>(str);
:これを使用しますあなたではなくXMLを使用したい場合は0
:
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>
あなたはそれを行うために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);
}
あなたはより頻繁にこの形式を使用する必要がある場合はもちろん
Deserializer
あなた自身を構築することができ
See it in action on dotNetFiddle
:テキストファイルの内容に従うことで
string[] assignments = new string[]{"a,5","b,6"};
StringLinesDeserializer<Car> deserializer = new StringLinesDeserializer<Car>();
Car newCar = deserializer.Deserialize(assignments);
:
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);
}
}
は、次のように使用することができ:
a、20
B、14
次のようCar
クラスを定義した場合:
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");
あなたは存在するものを使うべきであり、ホイールを再開発しようとするのではなく、既にXML、JSONなどと同じようにしなければなりません。 – Nasreddine
jsonやxmlのような標準的なシリアライゼーションを使うほうが簡単でしょう。質問であなたが書いている形式を好む理由は何ですか? – faester
私はこれが好きではない、それは私が持っている考えです。これを行う別の方法がある場合は、私は知っていることをもっと喜ぶでしょう。 :) – Nowaczek