เหตุใดการดีซีเรียลไลซ์ XML ลงใน Object จึงส่งคืนค่าว่าง

ฉันมีสตริง XML เช่นนั้น:

<?xml version="1.0" ?>
<result>
<vmeet_id>7121</vmeet_id>
<username>MT_Hue_QuangBinh_QuangTri</username>
<email></email>
<begin_date>2010-04-21 08:53</begin_date>
<expiry_date>2010-12-21 00:00</expiry_date>
<point></point>
<info>OK</info>
</result>

ฉันต้องการดีซีเรียลไลซ์มันเป็นวัตถุ ดังนั้นฉันจึงสร้างคลาสนี้ขึ้นมา:

[Serializable] 
[XmlRoot(ElementName = "result", IsNullable = false)]
public class UserInfo
{
    [XmlAttribute("vmeet_id")]
    public int UserID { get; set; }
    [XmlAttribute("username")]
    public string Username { get; set; } 
    [XmlAttribute("email")]
    public string Email { get; set; }
    [XmlAttribute("begin_date")]
    public DateTime BeginDate { get; set; }
    [XmlAttribute("expiry_date")]
    public DateTime ExpiryDate { get; set; }
    [XmlAttribute("point")]
    public string Point { get; set; }
    [XmlAttribute("info")]
    public string Info { get; set; }
}

จากนั้นใช้รหัสนี้เพื่อดีซีเรียลไลซ์:

var deserializer = new XmlSerializer(typeof(UserInfo));
        using (var stream = new StringReader(result))
        {
            UserInfo userInfo = (UserInfo)deserializer.Deserialize(stream);
            return userInfo;
        }

ค่าที่ส่งคืนไม่ใช่ค่าว่าง แต่คุณสมบัติทั้งหมดเป็นค่าว่าง:

<result vmeet_id="0" begin_date="0001-01-01T00:00:00" expiry_date="0001-01-01T00:00:00"/>

เกิดอะไรขึ้นที่นี่? ฉันลืมอะไรไปหรือเปล่า?

ขอบคุณ


person Quan Mai    schedule 23.11.2010    source แหล่งที่มา
comment
หมายเหตุด้านข้าง: หากคุณมี XML จำนวนมาก คุณสามารถใช้เครื่องมือบรรทัดคำสั่ง xsd.exe เพื่อสร้าง XML schema และในขั้นตอนที่สองคลาส C# จาก XML นั้นซึ่งจะสามารถดีซีเรียลไลซ์ XML นั้นเป็นคลาส C# ได้ แค่คิด... แทนที่จะใช้เวลาหลายชั่วโมงในการเขียนโค้ดด้วยมือ - แค่เรียก xsd.exe สองครั้ง - เท่านี้ก็เสร็จแล้ว!   -  person marc_s    schedule 23.11.2010


คำตอบ (2)


ใน XML ของคุณ 'vmeet' 'begin_date' ทั้งหมดของคุณคือ elements ทั้งหมด แต่ในคลาส UserInfo คุณประกาศเป็น XMLAttribute ลองเปลี่ยนเป็น XMLElement น่าจะช่วยได้

person xandy    schedule 23.11.2010
comment
ปัญหาอื่น เมื่อฉันทำการดีซีเรียลไลซ์ ค่าวันที่และเวลาไม่สามารถดีซีเรียลไลซ์ได้อย่างถูกต้อง (ดูเหมือนว่าไม่มีสคีมา) ส่งคืนค่าที่สิ้นสุด: สตริง '2010-04-21 08:53' ไม่ใช่ค่า AllXsd ที่ถูกต้อง คุณช่วยแนะนำวิธีแก้ปัญหาได้ไหม? - person Quan Mai; 23.11.2010
comment
ฉันไม่แน่ใจว่า MS รูปแบบ Datetime ประเภทใดที่ใช้ในการทำให้เป็นอนุกรม แต่ส่วนใหญ่น่าจะเป็นไปตามรูปแบบ XSD Datetime มาตรฐาน: w3schools.com/schema/schema_dtypes_date.asp - person xandy; 23.11.2010

ใช้ XmlDocument และ Json เพื่อแก้ไขผลลัพธ์ได้อย่างง่ายดาย

        public static T XmlToModel<T>(string xml)
        {

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);

            string jsonText = JsonConvert.SerializeXmlNode(doc);

            T result = JsonConvert.DeserializeObject<T>(jsonText);

            return result;
        }
person ErdemS    schedule 30.09.2020
comment
เหตุใดจึงทำการดีซีเรียลไลซ์สตริงเป็นเอกสาร XML จากนั้นจึงซีเรียลไลซ์เป็นสตริง JSON จากนั้นจึงทำการดีซีเรียลไลซ์ JSON เพื่อวัตถุในที่สุด - person CrudaLilium; 30.09.2020