我有一个在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”的错误,说明类型是必需的
任何人都可以告诉我如何在单独的方法或函数中接受整个类对象
答案 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)