如何构建DataContractJsonSerialize的便捷功能

时间:2008-12-30 20:10:23

标签: c# json

我有一个在3-4方法中序列化类对象的通用代码,所以我想在所有方法中为该代码创建一个通用函数并调用函数

我正在通过以下代码

进行此操作
DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, this);

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

                ms.Close();

我想将这个公共代码放在seprate通用函数中,该函数返回Json字符串并接受整个类作为输入参数,因为我将整个类转换为Json对象,我尝试创建函数,如

public string GenerateJsonString(class C1)

但是这给了我关键字“class”的错误,说明类型是必需的

任何人都可以告诉我如何在单独的方法或函数中接受整个类对象

6 个答案:

答案 0 :(得分:4)

您将“类”与“对象”混淆。序列化一个对象,它是特定类的实例(又名“类型”)。

您可以创建一个方法,为所有对象“object”提供.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 :(得分:1)

将参数键入“object”。您不能将类作为参数传递,只能传递类的实例 - 在OOP中称为“对象”

public string GenerateJsonString(object obj)

答案 2 :(得分:1)

如果传递给此方法的所有对象都是从公共基类派生的类的实例,则可以使用多态并编写方法以接受作为基类实例的对象。否则,所有类都派生自System.Object

答案 3 :(得分:1)

“类对象”的含义并不清楚。如果你的意思是一个对象,正常传递对象的引用会传递“整个对象”(好吧,对它的引用)。你可以找到所有成员。

如果你想传递类型本身,你应该将参数声明为Type - 但我怀疑这不是你想要的。

如果您想编写一个接受任何对象的方法,只需将参数声明为Object类型:

public string GenerateJsonString(object x)

就我个人而言,我不会使用Encoding.Default(这是系统特定的)将二进制文件转换为文本 - 序列化程序真正使用的编码是什么?它是否允许您传入TextWriter(例如StringWriter)而不是流?

答案 4 :(得分:0)

您可以接受一个对象。没有实例化类,并且无法将其传递给方法。

答案 5 :(得分:-1)

尝试使用Type而不是class

public string GenerateJsonString(Type t1)