私は、WCFサービスのための一種の「ストアアンドフォワード」アプリケーションを開発中です。私はXElementとして生のXMLブロブとしてデータベースにメッセージを保存したいと思います。私はdatacontractをデータベース呼び出しのために必要なXElement型に変換するのに少し問題があります。何か案は?DataContractをデータベースとしてXMLとして保存する
答えて
これはあなたがに入れることができ、文字列、としてそれを返します。 dbをXML列に変換します。ここでは、datacontractsをシリアライズするのに使用できる良い汎用メソッドです。
public static string Serialize<T>(T obj)
{
StringBuilder sb = new StringBuilder();
DataContractSerializer ser = new DataContractSerializer(typeof(T));
ser.WriteObject(XmlWriter.Create(sb), obj);
return sb.ToString();
}
btw、linq to sqlを使用していますか?私が尋ねる理由はあなたの質問のXElementの部分のためです。その場合、.dbmlデザイナーでこれを変更して、デフォルトのXElementではなくCLR型として文字列を使用することができます。データベースがSQL Server 2005または上記の場合
これは私のためには機能しませんでした。以下のuser224125の回答を参照してください。 –
私はXElementオブジェクトにそれを得るための最も効率的な方法についてはよく分からないんだけど、ただ実行する文字列にそれを得るために:
DataContractSerializer serializer = new DataContractSerializer(typeof(Foo));
using (MemoryStream memStream = new MemoryStream())
{
serializer.WriteObject(memStream, fooInstance);
byte[] blob = memStream.ToArray();
}
は、あなたがXMLデータ型を使用することができます
private readonly DataContractToSerialize _testContract =
new DataContractToSerialize
{
ID = 1,
Name = "One",
Children =
{
new ChildClassToSerialize {ChildMember = "ChildOne"},
new ChildClassToSerialize {ChildMember = "ChildTwo"}
}
};
public void SerializeDataContract()
{
using (var outputStream = new MemoryStream())
{
using (var writer = XmlWriter.Create(outputStream))
{
var serializer =
new DataContractSerializer(_testContract.GetType());
if (writer != null)
{
serializer.WriteObject(writer, _testContract);
}
}
outputStream.Position = 0;
using (
var conn =
new SqlConnection(Settings.Default.ConnectionString))
{
conn.Open();
const string INSERT_COMMAND =
@"INSERT INTO XmlStore (Data) VALUES (@Data)";
using (var cmd = new SqlCommand(INSERT_COMMAND, conn))
{
using (var reader = XmlReader.Create(outputStream))
{
var xml = new SqlXml(reader);
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@Data", xml);
cmd.ExecuteNonQuery();
}
}
}
}
}
私はStringBuilderのを使用していますジェイソンw'Serialize機能を使用しようとしましたが、それはLingToSQLデザイナーのための空の文字列を返します。 [のDataContract()]
属性がAgileJon
によって提案され、その後、文字列に変換しUTF7Encodingを使用して、私はバイト配列にserialzeた場合、それが作成読めるXML文字列で生成されたテーブルクラス 。
static string DataContractSerializeUsingByteArray<T>(T obj)
{
string sRet = "";
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
using (MemoryStream memStream = new MemoryStream())
{
serializer.WriteObject(memStream, obj);
byte[] blob = memStream.ToArray();
var encoding= new System.Text.UTF7Encoding();
sRet = encoding.GetString(blob);
}
return sRet;
}
なぜstringBuilderソリューションが機能しないのかよくわかりません。
最も投票された回答(Jason W. posted)は私には役に立たなかった。私はその答えが最も票を集めた理由を知らない。しかし、周りに検索した後、私は私のプロジェクトのために働いていたこの
http://billrob.com/archive/2010/02/09/datacontractserializer-converting-objects-to-xml-string.aspx
を見つけました。私はちょうどいくつかのクラスを持っていて、datacontractとdatamemeber属性をクラスとプロパティに入れて、データベースに書き込めるXML文字列を取得したかったのです。それが404になる上記の包みリンクから
コード:
はシリアル化:
var serializer = new DataContractSerializer(tempData.GetType());
using (var backing = new System.IO.StringWriter())
using (var writer = new System.Xml.XmlTextWriter(backing))
{
serializer.WriteObject(writer, tempData);
data.XmlData = backing.ToString();
}
デシリアライズ:
var serializer = new DataContractSerializer(typeof(T));
using (var backing = new System.IO.StringReader(data.XmlData))
using (var reader = new System.Xml.XmlTextReader(backing))
{
return serializer.ReadObject(reader) as T;
}
リンクをありがとう。 –
- 1. データベースにXML構成ファイルをフィールドとして保存するか、そのパスを保存しますか?
- 2. perlで作成されたデータベースがxmlとして保存されました
- 3. PHPでXMLコードを文字列として保存します
- 4. CakePHPはXML/JSONとしてデータのスナップショットを保存します
- 5. xmlオブジェクトのオブジェクトをオブジェクトとして保存する
- 6. XMLとしてiframeコンテンツを保存する
- 7. PowershellでXMLを保存してフォーマットを保存する
- 8. jspで画像をアップロードしてデータベースをblobとして保存する方法
- 9. Nokogiriと解析してデータベースに保存しますか?
- 10. jQueryとPHPを使用してフォームなしでデータベースに保存
- 11. Sqlite3データベースにHTMLをXMLとして保存することはできますか?
- 12. プログラムとしてWordファイルを画像として保存する
- 13. オブジェクトをドラフトとして保存する
- 14. データフレームをバイナリファイルとして保存する
- 15. GPrologデータベースを保存しています
- 16. データベースを保存していますか?
- 17. データベースにギャラリーとして保存されている画像を表示する
- 18. C#Windowsフォーム:保存して苦情として保存
- 19. pl/sqlとして保存
- 20. RDDテキストファイルとして保存
- 21. プロジェクトとして保存
- 22. Qtとデータベースは保存して開きます
- 23. xmlをSQLデータベースに保存する
- 24. データとしてのhtml5キャンバスをmysqlデータベースに保存
- 25. ファイルを保存するときにPDFとして保存するWordマクロ
- 26. 写真をMySQL DBに保存するとファイルとして保存する
- 27. JavaでデータベースをXMLとして使用
- 28. XMLとしてデータを保存する際の攻撃を防止する
- 29. Facebookに保存してPHPデータベースに保存するようにしました
- 30. DataContract XMLシリアル化とXML属性
のXElementは "生のXMLブロブ" と同じではありません。前者はXMLでこれを行うのに便利な型です。もう1つは、特定の形式の文字列です。 [DataContract]で装飾された任意の型からXML文字列に保存できます。 (例については下記を参照)。 XElement - それはあなたの信用センタに座ることができます、あなたはそれを必要としません。 – Cheeso