как сериализовать DataTable в JSON или XML - PullRequest
5 голосов
/ 17 марта 2010

Я пытаюсь сериализовать DataTable в Json или XML.возможно ли это и как?любые учебники и идеи, пожалуйста.

Например, есть таблица sql:

CREATE TABLE [dbo].[dictTable](
    [keyValue] [int] IDENTITY(1,1) NOT NULL,
    [valueValue] [int] NULL,
 CONSTRAINT [Psd2Id] PRIMARY KEY CLUSTERED 
(
    [keyValue] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

C # код:

string connectionString =
          "server=localhost;database=dbd;uid=**;pwd=**";

            SqlConnection mySqlConnection = new SqlConnection(connectionString);
            string selectString =  "SELECT keyValue, valueValue FROM dicTable";

            SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

            mySqlCommand.CommandText = selectString;

            SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();

            mySqlDataAdapter.SelectCommand = mySqlCommand;

            DataSet myDataSet = new DataSet();

            mySqlConnection.Open();

            string dataTableName = "dictionary";
            mySqlDataAdapter.Fill(myDataSet, dataTableName);

            DataTable myDataTable = myDataSet.Tables[dataTableName];
            //now how to serialize it?

Ответы [ 3 ]

13 голосов
/ 17 марта 2010

Для XML это просто:

DataTable myTable = new DataTable();
myTable.WriteXml(@"c:\myfile");
1 голос
/ 06 декабря 2016

Вот как конвертировать его в Json:

        DataTable dt = new DataTable();
        dt.Load(reader);
        string temp = JsonConvert.SerializeObject(dt);

и если вы хотите преобразовать этот json в список объектов (это может быть ваша таблица EF), используйте следующую команду:

dbContext db = new dbContext();
List<Object> jsonList = (List<Object>)JsonConvert.DeserializeObject(temp, typeof(List<Object>));
1 голос
/ 31 января 2015

Позвольте мне попытаться ответить на ваш вопрос. Когда дело доходит до сериализации набора данных или таблицы данных, не сохраняйте файл и не выполняйте обратное чтение. Это приводит к дополнительным операциям ввода-вывода и не является жизнеспособным во всех сценариях. Что вам нужно сделать, это написать функцию для сериализации DataTable. (Убедитесь, что вы указали имя для заказа DataTable для сериализации. См. Пример ниже в C #

/ * Используйте этот метод для сериализации данного объекта в XML. Мы перейдем к этому позже * /

    private XmlElement Serialize(object obj)
    {
        XmlElement serializedXmlElement = null;  

        try
        {
            System.IO.MemoryStream memoryStream = new MemoryStream();
            System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
            xmlSerializer.Serialize(memoryStream, obj);
            memoryStream.Position = 0;

            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(memoryStream);
            serializedXmlElement = xmlDocument.DocumentElement;
        }
        catch (Exception e)
        {
            //logging statements. You must log exception for review
        }

        return serializedXmlElement; 
    }

После того, как вы реализовали метод Serialize, вы можете сериализовать ваш DataTable, как показано ниже. Я не пишу здесь весь мой образец для краткости.

        adapter.Fill(employee);
        employee.TableName = "Employees";
        XmlElement xmlElement = (XmlElement)Serialize(employee);
        Console.WriteLine(xmlElement.ToString());
        string xmlString = xmlElement.OuterXml.ToString();

        return xmlString;

Надеюсь, это поможет. Пожалуйста, дайте мне знать, если у вас есть еще вопросы.

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