public class User
{
public int ID { get; set; }
public string Name { get; set; }
public int Age;
public string Address { get; set; }
private string _gender;
public string Gender
{
get => _gender;
set => _gender = value;
}
public User(int age, int id, string name, string address,string gender)
{
Age = age;
ID = id;
Name = name;
Address = address;
_gender = gender;
}
public User()
{
}
}</code></pre></div>
public class XmlHelper<T> where T : class
{
public string TargetPath { get; set; }
private Encoding encoding => System.Text.Encoding.GetEncoding("shift_jis");
public XmlHelper(string targetPath)
{
TargetPath = targetPath;
}
public XmlHelper() : base()
{
}
public void Save(T data)
{
var serializer = new XmlSerializer(typeof(T));
using (var writer = new StreamWriter(TargetPath, false, encoding))
{
serializer.Serialize(writer, data);
writer.Close();
}
}
/// <summary>
/// XMLファイルを読み込む
/// </summary>
public T Read()
{
var serializer = new XmlSerializer(typeof(T));
T obj;
using (var reader = new StreamReader(TargetPath, encoding))
{
obj = (T)serializer.Deserialize(reader);
reader.Close();
}
return obj;
}
}</code></pre></div>
すると下記のような感じで保存できています。
ここではprivateなフィールドの_genderだけ出力できていません。
それ以外は出力できています。
プロパティを動的に探して色々できる
最後にプロパティは動的に検索ができます。
どういうことかというと、下記のコードを見てください。
var props = typeof(User).GetProperties();
var str = new StringBuilder();
foreach (var user in _users)
{
foreach (var prop in props)
{
str.Append($@"{prop.Name} : {prop.GetValue(user)}");
str.Append(Environment.NewLine);
}
}
MessageBox.Show(str.ToString());</code></pre></div>
コメント