Как создать удобную функцию DataContractJsonSerialize - PullRequest
1 голос
/ 30 декабря 2008

У меня есть общий код сериализации объекта класса в моих 3-4 методах, поэтому я думаю создать общую функцию для этого кода и вызывать функцию во всех методах

Я делаю это из следующего кода

DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, this);

                json = Encoding.Default.GetString(ms.ToArray());

                ms.Close();

Я хочу поместить этот общий код в отдельную общую функцию, которая возвращает строку Json и которая принимает весь класс в качестве входного параметра, поскольку я преобразовываю весь класс в объект Json, я попытался создать функцию, подобную

открытая строка GenerateJsonString (класс C1)

но это дает мне ошибку по ключевому слову "class", говорящему, что тип обязателен

Может кто-нибудь сказать мне, как я могу принять весь объект класса в отдельном методе или функции

Ответы [ 6 ]

4 голосов
/ 30 декабря 2008

Вы путаете «класс» с «объектом». Вы сериализуете объект, который является экземпляром определенного класса (он же «Тип»).

Вы можете создать метод, принимающий параметр базового типа .NET для всех объектов, «объект», например:

public static string GenerateJsonString(object o) 
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        ser.WriteObject(ms, o);
        json = Encoding.Default.GetString(ms.ToArray());
        ms.Close();
        return json;
    }
}
1 голос
/ 30 декабря 2008

Непонятно, что вы подразумеваете под «объектом класса». Если вы имеете в виду объект, то при передаче ссылки на объект как обычно передается «весь объект» (ну, ссылка на него). Вы можете получить на всех членов.

Если вы хотите передать сам тип , вы должны объявить параметр как Тип - но я подозреваю, что это не совсем то, что вы хотите.

Если вы хотите написать метод, который будет принимать любой объект, просто объявите параметр как тип Object :

public string GenerateJsonString(object x)

Лично я бы не стал использовать Encoding.Default (это зависит от системы), чтобы преобразовать двоичный файл в текст, кстати - какую кодировку действительно использует сериализатор? Позволяет ли вам передавать TextWriter (например, StringWriter) вместо потока?

1 голос
/ 30 декабря 2008

Если все объекты, которые вы передаете этому методу, являются экземплярами классов, производных от общего базового класса, то вы можете использовать полиморфизм и написать метод для принятия объектов, которые являются экземплярами базового класса. В противном случае все классы являются производными от System.Object.

1 голос
/ 30 декабря 2008

Введите параметр как «объект». Вы не можете передать класс в качестве параметра, только экземпляр класса - который в ООП упоминается как «объект»

public string GenerateJsonString(object obj)
0 голосов
/ 30 декабря 2008

Вы можете принять объект. Класс не создан и не может быть передан методу.

0 голосов
/ 30 декабря 2008

Попробуйте использовать тип вместо класса

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