คำถามติดแท็ก xml-serialization

แท็กนี้อ้างถึงเทคโนโลยีการทำให้เป็นอนุกรมซึ่งใช้ XML เป็นรูปแบบข้อมูล

18
XmlSerializer ให้ FileNotFoundException ที่ตัวสร้าง
แอปพลิเคชันที่ฉันทำงานด้วยล้มเหลวเมื่อฉันพยายามเรียงลำดับประเภท คำสั่งเช่น XmlSerializer lizer = new XmlSerializer(typeof(MyType)); ผลิต: System.IO.FileNotFoundException occurred Message="Could not load file or assembly '[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified." Source="mscorlib" FileName="[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" FusionLog="" StackTrace: at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, …

10
ทำให้วัตถุเป็นสตริง
ฉันมีวิธีการดังต่อไปนี้เพื่อบันทึก Object เป็นไฟล์: // 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(); } ฉันยอมรับว่าฉันไม่ได้เขียน (ฉันแปลงเป็นวิธีส่วนขยายที่ใช้พารามิเตอร์ประเภท) ตอนนี้ฉันต้องการมันเพื่อให้ xml กลับมาให้ฉันเป็นสตริง (แทนที่จะบันทึกลงในไฟล์) ฉันกำลังมองหา แต่ฉันยังไม่ได้คิดออก ฉันคิดว่ามันอาจจะง่ายสำหรับคนที่คุ้นเคยกับวัตถุเหล่านี้ ถ้าไม่ฉันจะคิดออกในที่สุด

17
ทำให้เป็นอันดับวัตถุเป็น XML
ฉันมีคลาส C # ที่ฉันได้รับมรดก ฉันได้สร้าง "วัตถุ" สำเร็จแล้ว แต่ฉันต้องทำให้วัตถุเป็น XML มีวิธีง่าย ๆ ที่จะทำมัน? ดูเหมือนว่าคลาสได้รับการตั้งค่าสำหรับการทำให้เป็นอนุกรม แต่ฉันไม่แน่ใจว่าจะได้รับการแสดง XML คำจำกัดความของชั้นเรียนของฉันมีลักษณะเช่นนี้: [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.domain.com/test")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.domain.com/test", IsNullable = false)] public partial class MyObject { ... } นี่คือสิ่งที่ฉันคิดว่าฉันสามารถทำได้ แต่มันไม่ทำงาน: MyObject o = new MyObject(); // Set o …

12
{"<user xmlns = ''> ไม่ได้คาดหวัง} Deserializing Twitter XML
ฉันดึง XML จาก Twitter ผ่าน OAuth ฉันขอhttp://twitter.com/account/verify_credentials.xmlซึ่งจะส่งคืน XML ต่อไปนี้: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;user&gt; &lt;id&gt;16434938&lt;/id&gt; &lt;name&gt;Lloyd Sparkes&lt;/name&gt; &lt;screen_name&gt;lloydsparkes&lt;/screen_name&gt; &lt;location&gt;Hockley, Essex, UK&lt;/location&gt; &lt;description&gt;Student&lt;/description&gt; &lt;profile_image_url&gt;http://a3.twimg.com/profile_images/351849613/twitterProfilePhoto_normal.jpg&lt;/profile_image_url&gt; &lt;url&gt;http://www.lloydsparkes.co.uk&lt;/url&gt; &lt;protected&gt;false&lt;/protected&gt; &lt;followers_count&gt;115&lt;/followers_count&gt; &lt;profile_background_color&gt;9fdaf4&lt;/profile_background_color&gt; &lt;profile_text_color&gt;000000&lt;/profile_text_color&gt; &lt;profile_link_color&gt;220f7b&lt;/profile_link_color&gt; &lt;profile_sidebar_fill_color&gt;FFF7CC&lt;/profile_sidebar_fill_color&gt; &lt;profile_sidebar_border_color&gt;F2E195&lt;/profile_sidebar_border_color&gt; &lt;friends_count&gt;87&lt;/friends_count&gt; &lt;created_at&gt;Wed Sep 24 14:26:09 +0000 2008&lt;/created_at&gt; &lt;favourites_count&gt;0&lt;/favourites_count&gt; &lt;utc_offset&gt;0&lt;/utc_offset&gt; &lt;time_zone&gt;London&lt;/time_zone&gt; &lt;profile_background_image_url&gt;http://s.twimg.com/a/1255366924/images/themes/theme12/bg.gif&lt;/profile_background_image_url&gt; &lt;profile_background_tile&gt;false&lt;/profile_background_tile&gt; &lt;statuses_count&gt;1965&lt;/statuses_count&gt; &lt;notifications&gt;false&lt;/notifications&gt; &lt;geo_enabled&gt;false&lt;/geo_enabled&gt; &lt;verified&gt;false&lt;/verified&gt; &lt;following&gt;false&lt;/following&gt; &lt;status&gt; &lt;created_at&gt;Mon Oct …

14
แปลงสตริง XML เป็นวัตถุ
ฉันได้รับสตริง XML ผ่านซ็อกเก็ตและต้องการแปลงเป็นวัตถุ C # ข้อความมีรูปแบบ: &lt;msg&gt; &lt;id&gt;1&lt;/id&gt; &lt;action&gt;stop&lt;/action&gt; &lt;/msg&gt; ฉันใหม่กับ. Net และไม่แน่ใจว่าวิธีปฏิบัติที่ดีที่สุดสำหรับการดำเนินการนี้ ฉันเคยใช้ JAXB สำหรับ Java มาก่อนและไม่แน่ใจว่ามีอะไรที่คล้ายกันหรือว่าจะจัดการในลักษณะที่แตกต่างออกไป

4
ทำไมคลาส XML-Serializable จึงต้องมี Constructor แบบไม่มีพารามิเตอร์
ฉันกำลังเขียนโค้ดเพื่อทำซีเรียลไลซ์เซชั่นของ XML ด้วยฟังก์ชั่นด้านล่าง public static string SerializeToXml(object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, obj); return writer.ToString(); } } ถ้าอาร์กิวเมนต์เป็นอินสแตนซ์ของคลาสที่ไม่มีตัวสร้างแบบไม่มีพารามิเตอร์จะมีข้อยกเว้น Unhandled Exception: System.InvalidOperationException: CSharpConsole.Foo ไม่สามารถทำให้เป็นอนุกรมได้เนื่องจากไม่มี Constructor แบบไม่มีพารามิเตอร์ ที่ System.Xml.Serialization.TypeDesc.CheckSupported () ที่ System.Xml.Serialization.TypeScope.GetTypeDesc (ประเภทประเภท MemberInfo sourc e, บูลีน directReference, บูลีน throwOnError) ที่ System.Xml.Serialization.TypeDesc.CheckSupported …

7
เป็นไปได้หรือไม่ที่จะทำการดีซีเรียลไลซ์ XML ไปยังรายการ <T>
รับ XML ต่อไปนี้: &lt;?xml version="1.0"?&gt; &lt;user_list&gt; &lt;user&gt; &lt;id&gt;1&lt;/id&gt; &lt;name&gt;Joe&lt;/name&gt; &lt;/user&gt; &lt;user&gt; &lt;id&gt;2&lt;/id&gt; &lt;name&gt;John&lt;/name&gt; &lt;/user&gt; &lt;/user_list&gt; และชั้นเรียนต่อไปนี้: public class User { [XmlElement("id")] public Int32 Id { get; set; } [XmlElement("name")] public String Name { get; set; } } เป็นไปได้ไหมที่จะใช้XmlSerializerdeserialize xml เป็น a List&lt;User&gt;? ถ้าเป็นเช่นนั้นฉันต้องใช้แอตทริบิวต์เพิ่มเติมประเภทใดหรือฉันต้องใช้พารามิเตอร์เพิ่มเติมใดเพื่อสร้างXmlSerializerอินสแตนซ์ อาเรย์ ( User[]) จะยอมรับได้หากเลือกน้อยกว่า

5
วิธีที่เหมาะสมในการใช้ IXmlSerializable
เมื่อโปรแกรมเมอร์ตัดสินใจที่จะใช้IXmlSerializableสิ่งที่เป็นกฎและแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้มัน ฉันได้ยินมาว่าGetSchema()ควรกลับมาnullและReadXmlควรย้ายไปองค์ประกอบต่อไปก่อนกลับ มันเป็นเรื่องจริงเหรอ? แล้วWriteXmlมันควรเขียนองค์ประกอบรากสำหรับวัตถุหรือคิดว่ารูทนั้นถูกเขียนไปแล้วหรือไม่? วัตถุลูกควรได้รับการปฏิบัติและเขียนอย่างไร? นี่คือตัวอย่างของสิ่งที่ฉันมีตอนนี้ ฉันจะอัปเดตเมื่อฉันได้รับคำตอบที่ดี public class MyCalendar : IXmlSerializable { private string _name; private bool _enabled; private Color _color; private List&lt;MyEvent&gt; _events = new List&lt;MyEvent&gt;(); public XmlSchema GetSchema() { return null; } public void ReadXml(XmlReader reader) { if (reader.MoveToContent() == XmlNodeType.Element &amp;&amp; reader.LocalName == "MyCalendar") { _name …

5
การละเว้น xsi และ xsd namespaces ทั้งหมดเมื่อทำให้วัตถุเป็นอนุกรมใน. NET?
รหัสมีลักษณะดังนี้: StringBuilder builder = new StringBuilder(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings)) { XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); s.Serialize(xmlWriter, objectToSerialize); } เอกสารที่ทำให้เป็นอนุกรมที่เป็นผลลัพธ์มีเนมสเปซดังนี้: &lt;message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns="urn:something"&gt; ... &lt;/message&gt; ในการลบเนมสเปซ xsi และ xsd ฉันสามารถทำตามคำตอบได้จากHow to serialize an object to XML without getting xmlns …

4
XmlSerializer: ลบ xsi และ xsd namespaces ที่ไม่จำเป็น
มีวิธีกำหนดค่า XmlSerializer เพื่อไม่ให้เขียนเนมสเปซเริ่มต้นในองค์ประกอบรากหรือไม่ สิ่งที่ฉันได้รับคือ: &lt;?xml ...&gt; &lt;rootelement xmlns:xsi="..." xmlns:xsd="..."&gt; &lt;/rootelement&gt; และฉันต้องการลบการประกาศ xmlns ทั้งสอง ซ้ำกันของ : วิธีการทำให้วัตถุเป็นอนุกรมเป็น XML โดยไม่ได้รับ xmlns =” …”?

7
การทำให้เป็นอนุกรม XML - ซ่อนค่า null
เมื่อใช้ Serializer .NET Xml มาตรฐานมีวิธีใดบ้างที่ฉันสามารถซ่อนค่า null ทั้งหมดได้ ด้านล่างนี้เป็นตัวอย่างผลลัพธ์ของคลาสของฉัน ฉันไม่ต้องการส่งออกจำนวนเต็มที่เป็นโมฆะได้หากตั้งค่าเป็น null เอาต์พุต Xml ปัจจุบัน: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;myClass&gt; &lt;myNullableInt p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /&gt; &lt;myOtherInt&gt;-1&lt;/myOtherInt&gt; &lt;/myClass&gt; สิ่งที่ฉันต้องการ: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;myClass&gt; &lt;myOtherInt&gt;-1&lt;/myOtherInt&gt; &lt;/myClass&gt;

5
MyAssembly.XmlSerializers.dll สร้างขึ้นเพื่ออะไร
ฉันกำลังทำโปรเจ็กต์ที่สร้างแอสเซมบลี ฉันเพิ่งสังเกตว่ามีการสร้างแอสเซมบลีเพิ่มเติม * .XmlSerializers.dll ทำไมไฟล์นี้ถูกสร้างขึ้นโดยอัตโนมัติและใช้ทำอะไร

19
.NET XML serialization gotchas? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม &amp; ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันเจอปัญหาบางอย่างเมื่อทำการอนุกรม C # XML ที่ฉันคิดว่าจะแบ่งปัน: คุณไม่สามารถจัดลำดับรายการที่อ่านอย่างเดียว (เช่น KeyValuePairs) คุณไม่สามารถจัดลำดับพจนานุกรมทั่วไปได้ ลองใช้คลาส wrapper นี้แทน (จากhttp://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx ): using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; [XmlRoot("dictionary")] public class SerializableDictionary&lt;TKey, TValue&gt; : Dictionary&lt;TKey, TValue&gt;, IXmlSerializable { public System.Xml.Schema.XmlSchema GetSchema() { return null; } public void ReadXml(System.Xml.XmlReader …

4
การทำให้วัตถุเป็นอนุกรมเป็น UTF-8 XML ใน. NET
การกำจัดวัตถุอย่างเหมาะสมถูกลบออกเพื่อความกะทัดรัด แต่ฉันตกใจถ้านี่เป็นวิธีที่ง่ายที่สุดในการเข้ารหัสวัตถุเป็น UTF-8 ในหน่วยความจำ จะต้องมีวิธีที่ง่ายกว่านี้ไม่ใช่หรือ? var serializer = new XmlSerializer(typeof(SomeSerializableObject)); var memoryStream = new MemoryStream(); var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8); serializer.Serialize(streamWriter, entry); memoryStream.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(memoryStream, System.Text.Encoding.UTF8); var utf8EncodedXml = streamReader.ReadToEnd();

6
วิธีการจัดลำดับวัตถุเป็น XML โดยไม่ได้รับ xmlns =“ …”?
มีวิธีที่ฉันจะทำให้วัตถุเป็นอนุกรมใน. NET โดยไม่ต้องใช้เนมสเปซ XML โดยอัตโนมัติด้วยหรือไม่ ดูเหมือนว่าโดยค่าเริ่มต้น. NET เชื่อว่าควรรวมเนมสเปซ XSI และ XSD ไว้ด้วย แต่ฉันไม่ต้องการให้มี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.