سؤال

إن تنسيق الملف الذي أعمل معه (OFX) يشبه XML ويحتوي على مجموعة من الأشياء النصية العادية قبل أن تبدأ بت تشبه XML. لا يحب أن يكون ذلك بين أجزاء النص العادي و XML ، لذلك أتساءل عما إذا كانت هناك طريقة للحصول على XMLSerialiser لتجاهل ذلك. أعلم أنه يمكنني الذهاب عبر الملف ومسح هذا الخط ، لكن سيكون من الأبسط وأنظف عدم كتابته في المقام الأول! أيه أفكار؟

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

المحلول

ليس صعبًا للغاية ، عليك فقط التسلسل إلى XMLWriter المعلن عنها بشكل صريح وتعيين الخيارات على هذا الكاتب قبل التسلسل.

public static string SerializeExplicit(SomeObject obj)
{    
    XmlWriterSettings settings;
    settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;

    XmlSerializerNamespaces ns;
    ns = new XmlSerializerNamespaces();
    ns.Add("", "");


    XmlSerializer serializer;
    serializer = new XmlSerializer(typeof(SomeObject));

    //Or, you can pass a stream in to this function and serialize to it.
    // or a file, or whatever - this just returns the string for demo purposes.
    StringBuilder sb = new StringBuilder();
    using(var xwriter = XmlWriter.Create(sb, settings))
    {

        serializer.Serialize(xwriter, obj, ns);
        return sb.ToString();
    }
}

نصائح أخرى

سيكون عليك معالجة كائن XML Writer الذي تستخدمه عند الاتصال Serialize طريقة. إنه Settings الملكية لديها OmitXmlDeclaration الخاصية ، والتي ستحتاج إلى ضبطها على True. ستحتاج أيضًا إلى تعيين ملف ConformanceLevel الخاصية ، وإلا فإن XMLWriter سوف يتجاهل OmitXmlDeclaration منشأه.

XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlWriter writer = XmlWriter.Create(/*whatever stream you need*/,settings);
serializer.Serialize(writer,objectToSerialize);
writer.close();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top