Jadi untuk melihat status objek saat ini saat runtime, saya sangat suka apa yang diberikan jendela Visual Studio Immediate. Cukup melakukan yang sederhana
? objectname
Akan memberi saya 'dump' yang diformat dengan baik dari objek.
Apakah ada cara mudah untuk melakukan ini dalam kode, jadi saya bisa melakukan sesuatu yang serupa saat login?
Jawaban:
Anda bisa mendasarkan sesuatu pada kode ObjectDumper yang dikirimkan bersama sampel Linq .
Lihat juga jawaban pertanyaan terkait ini untuk mendapatkan sampel.
sumber
DumpToString
danDump
keObject
kelas. Berguna.w3wp.exe
macet ketika saya mencoba menggunakanObjectDumper
sepertiRequest.DumpToString("aaa");
Untuk grafik objek yang lebih besar, saya menggunakan Json kedua tetapi dengan strategi yang sedikit berbeda. Pertama saya memiliki kelas statis yang mudah dipanggil dan dengan metode statis yang membungkus konversi Json (catatan: bisa menjadikan ini metode ekstensi).
Kemudian di
Immediate Window
,lookHere akan muncul secara otomatis di
Locals
jendela yang diawali dengan $ atau Anda dapat menambahkan arloji ke sana. Di sisi kananValue
kolom di inspektur, ada kaca pembesar dengan tanda dropdown di sampingnya. Pilih tanda panah dropdown dan pilih Json visualizer.Saya menggunakan Visual Studio 2013.
sumber
Newtonsoft.Json.JsonConvert.SerializeObject(sampleData, Formatting.Indented)
Saya yakin ada cara-cara yang lebih baik untuk melakukan ini, tetapi di masa lalu saya telah menggunakan metode sesuatu seperti yang berikut ini untuk membuat cerita bersambung suatu objek menjadi string yang bisa saya catat:
Anda akan melihat bahwa metode ini mungkin juga mengembalikan pengecualian daripada objek serial, jadi Anda ingin memastikan bahwa objek yang ingin Anda log bisa serial.
sumber
Failed to access type 'System.__ComObject' failed
. Noob to c #, akan sangat menghargai bantuan.Anda bisa menggunakan Visual Studio Immediate Window
Cukup tempel ini (ubah
actual
ke nama objek Anda dengan jelas):Seharusnya mencetak objek dalam JSON
Anda harus dapat menyalinnya di atas alat teks mekanis atau notepad ++ dan mengganti tanda kutip (
\"
) dengan"
dan baris baru (\r\n
) dengan ruang kosong, lalu menghapus tanda kutip ganda ("
) dari awal dan akhir dan menempelkannya ke jsbeautifier agar lebih mudah dibaca.PEMBARUAN untuk komentar OP
ini akan memungkinkan Anda untuk membuang objek apa pun.
Semoga ini menghemat waktu Anda.
sumber
Console.Log(Newtonsoft.Json.JsonConvert.SerializeObject(actual));
? :) dan ya saya memang melewatkannya. Pertanyaan ini muncul ketika Anda mencari di google.co.uk/...ServiceStack.Text memiliki metode ekstensi T.Dump () yang melakukan hal ini, secara rekursif membuang semua properti jenis apa pun dalam format yang mudah dibaca.
Contoh penggunaan:
dan output:
sumber
He didn't say fields
- Katanyaentire objects
, yang termasuk bidang. Dia juga menyebutkan fitur Jendela Segera Visual Studio sebagai contoh apa yang ingin dia capai ( "Hanya melakukan yang sederhana? objectname
akan memberi saya 'dump' diformat dengan baik dari objek" ).? objectname
mencetak semua bidang juga.This has been immensely helpful - one of my most used extension methods to date
- Saya tidak mempertanyakan apakah ini berguna, hanya saja ia membuang seluruh objek.Int32
bidang memilikiMaxValue
bidang, yang merupakanInt32
dirinya sendiri ...), itu poin yang baik, tetapi itu tidak mengubah fakta bahwa objek - dan tentu saja keseluruhan - terdiri dari bidang, juga, bukan hanya properti. Terlebih lagi (Anda tidak membahasnya),? objectname
di kolom isImmediate Window
does display - tanpa memicu loop tak terbatas. Jika itu tentang downvote saya, saya dapat menariknya (jika Anda membiarkan saya dengan membukanya, itu). Saya pada dasarnya tidak setuju.Berikut ini adalah cara sederhana yang bodoh untuk menulis objek datar, yang diformat dengan baik:
Apa yang terjadi adalah bahwa objek dikonversi terlebih dahulu ke representasi internal JSON oleh
JObject.FromObject
, dan kemudian dikonversi ke string JSON olehToString
. (Dan tentu saja string JSON adalah representasi yang sangat bagus dari objek sederhana, terutama karenaToString
akan menyertakan baris baru dan indentasi.) "ToString" tentu saja asing (seperti yang tersirat dengan menggunakan+
untuk menggabungkan string dan objek), tetapi Saya agak suka menentukannya di sini.sumber
Anda bisa menggunakan refleksi dan loop melalui semua properti objek, lalu dapatkan nilainya dan menyimpannya ke log. Pemformatan benar-benar sepele (Anda dapat menggunakan \ t untuk membuat indentasi properti objek dan nilainya):
sumber
Apa yang saya suka lakukan adalah mengganti ToString () sehingga saya mendapatkan hasil yang lebih berguna di luar nama tipe. Ini berguna dalam debugger, Anda dapat melihat informasi yang Anda inginkan tentang suatu objek tanpa perlu mengembangkannya.
sumber
Saya menemukan perpustakaan bernama ObjectPrinter yang memungkinkan untuk dengan mudah membuang objek dan koleksi ke string (dan banyak lagi). Itu tepat seperti yang saya butuhkan.
sumber
Berikut ini adalah versi lain yang melakukan hal yang sama (dan menangani properti bersarang), yang saya pikir lebih sederhana (tidak ada ketergantungan pada pustaka eksternal dan dapat dimodifikasi dengan mudah untuk melakukan hal-hal selain penebangan):
sumber
Date
properti di objek batin Anda ... hanya mengatakan ...Anda dapat menulis metode WriteLine Anda sendiri-
Gunakan seperti-
Untuk menulis koleksi kita bisa menggunakan-
Metode ini mungkin terlihat seperti-
Menggunakan
if, else if
dan memeriksa antarmuka, atribut, tipe dasar, dll. Dan rekursi (karena ini adalah metode rekursif) dengan cara ini kita dapat mencapai objek dumper, tetapi pasti membosankan. Menggunakan objek dumper dari Sampel LINQ Microsoft akan menghemat waktu Anda.sumber
Berdasarkan jawaban @engineforce, saya membuat kelas ini yang saya gunakan dalam proyek PCL dari Solusi Xamarin:
sumber
Semua jalur di atas menganggap bahwa objek Anda dapat serial ke XML atau JSON,
atau Anda harus mengimplementasikan solusi Anda sendiri.
Tetapi pada akhirnya Anda masih sampai pada titik di mana Anda harus menyelesaikan masalah seperti
Ditambah log Anda ingin informasi lebih lanjut:
Ada solusi terbaik yang menyelesaikan semua ini dan banyak lagi.
Gunakan paket Nuget ini: Desharp .
Untuk semua jenis aplikasi - aplikasi web dan desktop .
Lihat dokumentasi Desharp Github . Ini memiliki banyak opsi konfigurasi .
Panggil saja di mana saja:
memang untuk apa pun yang dapat Anda temukan di lingkungan .NET .
Saya percaya ini akan membantu.
sumber