是否有一个内置于.NET的方法可以将所有属性和对象写入控制台?当然可以使用反射制作一个,但我很好奇,如果这已经存在...特别是因为你可以在立即窗口中的Visual Studio中完成它.在那里你可以有一个对象名称(在调试模式下),按回车键,并且它的所有内容都打印得非常漂亮.
这样的方法存在吗?
我正在尝试调查崩溃转储中的错误(因此我无法更改代码).我有一个非常复杂的对象(序列化表示中有数千行),并且它的状态不一致.要调查其状态,Visual Studio调试器视图是无用的.但该对象有一个数据契约.我想序列化它,然后使用我喜欢的文本编辑器浏览对象.是否可以从调试器中执行此操作?
我正在寻找一个可以输出对象及其所有叶值的类,其格式类似于:
User
- Name: Gordon
- Age : 60
- WorkAddress
- Street: 10 Downing Street
- Town: London
- Country: UK
- HomeAddresses[0]
...
- HomeAddresses[1]
...
Run Code Online (Sandbox Code Playgroud)
(或更清晰的格式).这相当于:
public class User
{
public string Name { get;set; }
public int Age { get;set; }
public Address WorkAddress { get;set; }
public List<Address> HomeAddresses { get;set; }
}
public class Address
{
public string Street { get;set; }
public string Town { get;set; }
public string Country { get;set; } …Run Code Online (Sandbox Code Playgroud) 我经常对System.Diagnostics.Debug.Write/WriteLine方法感到沮丧.我想使用TextWriter类中熟悉的Write/WriteLine方法,所以我经常写
Debug.WriteLine("# entries {0} for connection {1}", countOfEntries, connection);
Run Code Online (Sandbox Code Playgroud)
这会导致编译器错误.我最终写作了
Debug.WriteLine(string.Format("# entries {0} for connection {1}",
countOfEntries, connection));
Run Code Online (Sandbox Code Playgroud)
这真的很尴尬.
CLR是否有一个派生自TextWriter的类"包装"System.Debug,还是应该自己滚动?
给出以下示例类:
public class MyClass
{
public string S { get; set; }
public int I { get; set; }
public DateTime D { get; set; }
private float F { get; set; }
private long l;
public MyClass()
{
S = "foo";
I = 42;
D = new DateTime(2011, 11, 11);
F = 3.14f;
l = 12435;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在我的应用程序中有myClass这个类的实例,请在调试模式(Visual Studio 2010)中逐步执行代码,并在某些时候将myClass类型转换为立即窗口,将显示以下内容:
{MyClass}
D: {11.11.2011 00:00:00}
F: 3.14
I: 42
l: 12435
S: "foo"
Run Code Online (Sandbox Code Playgroud)
获取对象及其所有值的字符串表示形式对于日志记录非常有用.有没有一个很好的方法来实现这一目标?
我猜立即窗口使用反射来循环所有字段和属性,但我想我会问,以防万一已存在一些效用函数或任何事情.
我有一个json如下:
"[{"a":"b","c":"d"},{"a":"e","c":"f"},{"a":"g","c":"h"}]"
Run Code Online (Sandbox Code Playgroud)
现在我想把它变成匿名类型"foo"的对象列表
var foo=new { a=string.empty , c=string.empty };
Run Code Online (Sandbox Code Playgroud)
代码是:
ServiceStackJsonSerializer Jserializer = new ServiceStackJsonSerializer();
dynamic foos = Jserializer.Deserialize<List<foo.GetType()>>(jsonString);
Run Code Online (Sandbox Code Playgroud)
但没有工作.
更新:
更换ServiceStack用JavascriptSerializer和传球dictionary[]来解决,而不需要将问题anonymous类型
JavaScriptSerializer jSerializer = new JavaScriptSerializer();
var Foos = jSerializer.Deserialize<Dictionary<string, object>[]>(jsonString);
Run Code Online (Sandbox Code Playgroud) 我上课基本上只是一排桌子。该行包含许多列。
出于测试目的,我需要输出我得到的读数。
所以我需要输出行中的所有列。
班级就像
public class tableRow
{
public tableRow()
{}
public string id
public string name
public string reg
public string data1
....
....
....
<lot more columns>
}
Run Code Online (Sandbox Code Playgroud)
然后我需要这样写:
Console.WriteLine("id: " + tableRow.id);
Console.WriteLine("name: " + tableRow.name);
Console.WriteLine("reg: " + tableRow.reg);
Console.WriteLine("data1: " + tableRow.data1);
...
...
...
<lot more Console.WriteLine>
Run Code Online (Sandbox Code Playgroud)
所以我想知道,有没有一种简单的方法来获得所有这些输出,而没有这么多的 console.writeLine?
谢谢
如何在C#中打印任意变量以便打印所有成员?
我用相同的技术找到了三个答案:
但是,当我尝试使用以下代码时,
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
public static class Program
{
public static void Main()
{
Test t1 = new Test(1, 2);
{
string json = JsonConvert.SerializeObject(t1, Formatting.Indented);
Console.WriteLine(json);
}
Dump(t1);
// Add 3 objects to a List.
List<Test> list = new List<Test>();
list.Add(new Test(1, 2));
list.Add(new Test(3, 4));
list.Add(new Test(5, 6));
Console.WriteLine(list.ToString());
{
string json = JsonConvert.SerializeObject(list, Formatting.Indented);
Console.WriteLine(json);
}
}
public class Test
{
int A;
int b;
public Test(int …Run Code Online (Sandbox Code Playgroud)