يمكن XmlSerializer إلغاء تسلسل إلى قيم الفارغة <كثافة>؟

StackOverflow https://stackoverflow.com/questions/306877

سؤال

وأردت إلغاء تسلسل رسالة XML يحتوي على العناصر التي يمكن أن تكون علامة nil="true" في فئة مع خاصية من نوع int?. وكانت الطريقة الوحيدة التي يمكنني أن أحصل عليه للعمل لكتابة بلدي نوع NullableInt الذي ينفذ IXmlSerializable. هل هناك طريقة أفضل للقيام بذلك؟

ولقد كتبت عن المشكلة كاملة والطريقة I حلها <لأ href = "http://alexscordellis.blogspot.com/2008/11/using-xmlserializer-to-deserialize-into.html" يختلط = "نوفولو noreferrer "> على بلدي بلوق .

هل كانت مفيدة؟

المحلول

وأعتقد أنك تحتاج إلى بادئة صفر = "صحيح" مع مساحة من أجل XmlSerializer إجراء deserialise فارغة.

MSDN على XSI: لا شيء

<?xml version="1.0" encoding="UTF-8"?>
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="array">
  <entity>
    <id xsi:type="integer">1</id>
    <name>Foo</name>
    <parent-id xsi:type="integer" xsi:nil="true"/>

نصائح أخرى

وبلدي الإصلاح إلى ما قبل عملية العقد، وتحديد أي "شيء" الصفات:

public static void FixNilAttributeName(this XmlNode @this)
{
    XmlAttribute nilAttribute = @this.Attributes["nil"];
    if (nilAttribute == null)
    {
        return;
    }

    XmlAttribute newNil = @this.OwnerDocument.CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance");
    newNil.Value = nilAttribute.Value;
    @this.Attributes.Remove(nilAttribute);
    @this.Attributes.Append(newNil);
}

وأنا زوجين هذا مع بحث العودية لالعقد التابعة، بحيث لأي XmlNode معين (أو XmlDocument)، ويمكنني أن يصدر مكالمة واحدة قبل إلغاء التسلسل. إذا كنت ترغب في الاحتفاظ الأصلي هيكل في الذاكرة معدلة، والعمل مع استنساخ () من XmlNode.

والطريقة البطيئة للغاية للقيام بذلك. انها الهش لعدد من الأسباب ولكن لي XML بسيط بما يكفي لتبرير مثل هذا حل سريع وقذرة.

xmlStr = Regex.Replace(xmlStr, "nil=\"true\"", "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top