Сериализация строки с разделяемого объекта на '|' - PullRequest
0 голосов
/ 25 октября 2010

Я написал этот класс-методы для .net 2.0 для создания объектов из строк, разделенных '|', и наоборот.

Но проблема в том, что они не дают правильных результатов в случае типов Inherted, то есть наследуемые свойства идут последними, а последовательность данных, представленных в виде разделенной '|' строки, не работает. *

Например:

class A
{
    int ID;
}

class B : A
{
    string Name;
}

строка «1 | Джон». методы читаются как имя == 1 и ID == "Джон".

Скажите, пожалуйста, как это сделать.

public class ObjectConverter<T>
    {
        public static T TextToObject(string text)
        {
            T obj = Activator.CreateInstance<T>();
            string[] data = text.Split('|');
            PropertyInfo[] props = typeof(T).GetProperties();
            int objectPropertiesLength = props.Length;            

            int i = 0;

            if (data.Length == objectPropertiesLength)
            {
                for (i = 0; i < objectPropertiesLength; i++)
                {
                    props[i].SetValue(obj, data[i], null);
                }
            }

            return obj;
        }

        public static string ObjectToText(T obj)
        {
            StringBuilder sb = new StringBuilder();

            Type t = typeof(T);

            PropertyInfo[] props = t.GetProperties();

            int i = 0;
            foreach (PropertyInfo pi in props)
            {
                object obj2 = props[i++].GetValue(obj, null);

                sb.Append(obj2.ToString() + "|");
            }

            sb = sb.Remove(sb.Length - 1, 1);

            return sb.ToString();
        }
    }

1 Ответ

2 голосов
/ 25 октября 2010
  • Я не думаю, что среда выполнения уверяет вас, что когда вы вызываете getproperties, объекты информации о свойствах всегда будут в том же порядке. Вам нужно будет сделать что-то вроде получения списка имен свойств, отсортировать их и использовать ту же сортировку для сериализации и десериализации.

  • Существует как минимум 3 способа сериализации объекта, встроенного в .net, и есть причина, по которой вы не используете один из этих

...