Saya memiliki metode berikut untuk menyimpan Objek ke file:
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
Saya akui saya tidak menulisnya (saya hanya mengonversinya menjadi metode ekstensi yang mengambil parameter tipe).
Sekarang saya membutuhkannya untuk mengembalikan xml kepada saya sebagai string (daripada menyimpannya ke file). Saya melihatnya, tetapi saya belum menemukan jawabannya.
Saya pikir ini mungkin sangat mudah bagi seseorang yang akrab dengan benda-benda ini. Jika tidak, saya akan mencari tahu akhirnya.
sumber
typeof(T)
versustoSerialize.GetType()
, silakan lakukan, tetapi tidak dalam jawaban saya. Terima kasih.Saya tahu ini bukan jawaban untuk pertanyaan, tetapi berdasarkan jumlah suara untuk pertanyaan dan jawaban yang diterima, saya curiga orang-orang benar-benar menggunakan kode untuk membuat serialisasi objek ke string.
Menggunakan serialisasi XML menambahkan sampah teks tambahan yang tidak perlu ke output.
Untuk kelas berikut
itu menghasilkan
Solusi yang lebih baik adalah dengan menggunakan serialisasi JSON (salah satu yang terbaik adalah Json.NET ). Membuat cerita bersambung suatu objek:
Untuk menghilangkan bakteri objek:
String JSON serial akan terlihat seperti:
sumber
Serialize dan Deserialize (XML / JSON):
sumber
Catatan Keamanan Kode
Mengenai jawaban yang diterima , penting untuk menggunakan
toSerialize.GetType()
alih-alihtypeof(T)
dalamXmlSerializer
konstruktor: jika Anda menggunakan yang pertama kode mencakup semua skenario yang mungkin, sementara menggunakan yang terakhir kadang-kadang gagal.Berikut ini adalah tautan dengan beberapa contoh kode yang memotivasi pernyataan ini, dengan
XmlSerializer
melemparkan Pengecualian saattypeof(T)
digunakan, karena Anda meneruskan turunan dari tipe turunan ke metode yang memanggilSerializeObject<T>()
yang didefinisikan dalam kelas dasar tipe turunan: http: // ideone .com / 1Z5J1 . Perhatikan bahwa Ideone menggunakan Mono untuk mengeksekusi kode: Pengecualian yang sebenarnya Anda dapatkan dengan menggunakan Microsoft .NET runtime memiliki pesan yang berbeda dari yang ditunjukkan pada Ideone, tetapi gagal sama saja.Demi kelengkapan saya memposting sampel kode lengkap di sini untuk referensi di masa mendatang, kalau-kalau Ideone (tempat saya memposting kode) menjadi tidak tersedia di masa depan:
sumber
using (StringWriter textWriter = new StringWriter() {}
penutupan / pembuangan objek dengan benar.using
pernyataan itu adalah teman terbaik bagi kita dan jugaIDisposable
objek pelaksana kita;)2p saya ...
sumber
sumber
Saya tidak dapat menggunakan metode JSONConvert yang disarankan oleh xhafan
Di .Net 4.5 bahkan setelah menambahkan referensi perakitan "System.Web.Extensions", saya masih tidak dapat mengakses JSONConvert.
Namun, setelah Anda menambahkan referensi Anda bisa mendapatkan string yang sama dengan menggunakan:
sumber
Saya merasa perlu membagikan kode yang dimanipulasi ini ke jawaban yang diterima - karena saya tidak punya reputasi, saya tidak dapat berkomentar ..
sumber
Dalam beberapa kasus yang jarang terjadi, Anda mungkin ingin mengimplementasikan serialisasi String Anda sendiri.
Tapi itu mungkin ide yang buruk kecuali Anda tahu apa yang Anda lakukan. (mis. serialisasi untuk I / O dengan file batch)
Sesuatu seperti itu akan melakukan triknya (dan akan mudah diedit dengan tangan / batch), tetapi hati-hati bahwa beberapa pemeriksaan harus dilakukan, seperti nama itu tidak mengandung baris baru.
sumber
[VB]
[C #]
sumber