Как мне разобрать универсальные типы данных из файла? - PullRequest
2 голосов
/ 24 мая 2011

У меня есть общий класс следующим образом:

class myClass<T>
{
    public T[] m_SomeData;
}

Я хочу реализовать универсальный метод для чтения данных из файла и заполнения полей данных этого класса. Что-то вроде:

class myClass<T>
{
    public T[] m_SomeData;

    public void ReadData(string fileName);
}

Реализация методов ReadData выглядит примерно так (для краткости удалена вся проверка ошибок):

void ReadData(string fileName)
{
   TextReader rdr = new StreamReader(fileName);

   string line = rdr.ReadLine();
   // Here I need to parse value of type T from the line
   // and initialize the m_SomeData array  
   // How do I do that? I would like to keep it generic if possible
}

Обратите внимание, я могу гарантировать, что тип T является числовым, по крайней мере, по соглашению

1 Ответ

1 голос
/ 24 мая 2011

Обновление: ОП хотел бы, чтобы читаемый человеком результат. Я бы предложил JavaScriptSerializer, затем, в:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Web.Extensions.dll

// Serialize:
using (var fs = new FileStream(fileName, FileMode.Create))
using (var writer = new StreamWriter(fs))
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    string s = serializer.Serialize(m_SomeData);                
    writer.Write(s);
}

// Deserialize:
using (var fs = new FileStream(fileName, FileMode.Open))
using (var reader = new StreamReader(fs))
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    var s = reader.ReadToEnd();
    m_SomeData = serializer.Deserialize<T[]>(s);                
}

Старый ответ: Это работа для BinaryFormatter :

using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
{
    BinaryFormatter formatter = new BinaryFormatter();
    m_SomeData = (T[])formatter.Deserialize(fs);
}

Это, конечно, предполагает, что вы также используете его для сериализации через formatter.Serialize(fs, m_SomeData);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...