我如何获得将在当前状态下重新创建运行时对象的等效C#代码?

时间:2012-10-02 04:11:44

标签: c# serialization

是否有任何.Net库可以获取对象并将其序列化为Stream,作为创建对象的C#代码?

Stream fs = ...;

CSharpFormatter formatter = new CSharpFormatter();

var p = new Person { Name = "Russ", Address = "1024 Oak St" };

formatter.Serialize(fs, p);

在这结束时,fs会以这样写的字符串结束:

new Person { Name = "Russ", Address = "1024 Oak St" };

我认为这样的事情对于从棘手的运行时案例中编写单元测试非常有用。

2 个答案:

答案 0 :(得分:1)

您可能会破解JSON序列化程序来执行此操作。给定Person对象,JSON Serializer可能返回类似于:

的内容
{"name":"Russ","Address":"1024 Oak St"}

从那里开始,使用Split()Replace()来接近你想要的东西是相当简单的:

{ Name = "Russ", Address = "1024 Oak St" }

其余的只是橱窗装饰。

答案 1 :(得分:0)

只有部分答案,但您可以使用System.CodeDom命名空间中的类来创建代码,例如this example,然后使用CSharpCodeProvider类中的GenerateCodeFromXXX方法来发出C#。< / p>

另一种方法是使用T4 Text Template,例如this walkthrough。和反射,但它需要Visual Studio。