My Goal is these.
- convert data class to dictionary.
- save/load that dictionary to/from txt, database, etc.
- convert dictionary to data class
I think I solved alomost, but one problem still remail.
the problem is that convert 2d string array to 2d it's original datatype array.
I have succeeded convert string to original datatype. like this
public static void SetFieldValue(Object target, FieldInfo fieldInfo, string value)
{
string fieldType = fieldInfo.FieldType.Name;
fieldType = fieldType.ToLower();
switch (fieldType)
{
case "boolean":
bool b;
fieldInfo.SetValue(target, bool.TryParse(value, out b) ? b : false);
break;
case "int32":
int n;
fieldInfo.SetValue(target, int.TryParse(value, out n) ? n : 0);
break;
case "double":
double d;
fieldInfo.SetValue(target, double.TryParse(value, out d) ? d : 0);
break;
case "string":
fieldInfo.SetValue(target, value);
break;
}
}
I have succeeded convert 1d string array to 1d original datatype array. like this
public static void SetFieldValue(Object target, FieldInfo fieldInfo, string[] arr)
{
string fieldType = fieldInfo.FieldType.Name;
fieldType = fieldType.ToLower();
fieldType = fieldType.Replace("[]", "");
switch (fieldType)
{
case "boolean":
bool b;
bool[] arr_b = Array.ConvertAll(arr, s => bool.TryParse(s, out b) ? b : false);
fieldInfo.SetValue(target, arr_b);
break;
case "int32":
int n;
int[] arr_n = Array.ConvertAll(arr, s => int.TryParse(s, out n) ? n : 0);
//int[] arr_n1 = Array.ConvertAll(arr, int.Parse);
//int[] arr_n2 = arr.Select(s => int.TryParse(s, out n) ? n : 0).ToArray();
fieldInfo.SetValue(target, arr_n);
break;
case "double":
double d;
double[] arr_d = Array.ConvertAll(arr, s => double.TryParse(s, out d) ? d : 0);
fieldInfo.SetValue(target, arr_d);
break;
case "string":
fieldInfo.SetValue(target, arr);
break;
}
}
but, what should i do when handle 2D array?
public static void SetFieldValue(Object target, FieldInfo fieldInfo, string[,] arr)
{
string fieldType = fieldInfo.FieldType.Name;
fieldType = fieldType.ToLower();
fieldType = fieldType.Replace("[,]", "");
int n;
double d;
bool b;
switch (fieldType)
{
case "boolean":
//bool[] arr_b = Array.ConvertAll(arr, s => bool.TryParse(s, out b) ? b : false);
//fieldInfo.SetValue(target, arr_b);
break;
case "int32":
//int[,] arr_n = Array.ConvertAll(arr, s => int.TryParse(s, out n) ? n : 0);
//fieldInfo.SetValue(target, arr_n);
break;
case "double":
//double[,] arr_d = Array.ConvertAll(arr, s => double.TryParse(s, out d) ? d : 0);
//fieldInfo.SetValue(target, arr_d);
break;
case "string":
fieldInfo.SetValue(target, arr);
break;
}
}
and, what i need to solve this problem is because I can't get GetType().GetField of array position. I gave up to get GetField of array[n_th,m_th] of array[row,col].