আমি কীভাবে কেবল এক্সএমএল সিরিয়ালাইজারকে কেবল সরল এক্সএমএল তৈরি করতে পারি?


86

আমি প্লেইন XML পেতে ছাড়া প্রয়োজন <?xml version="1.0" encoding="utf-16"?>শুরুতে এবং xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"থেকে প্রথম উপাদানের ক্ষেত্রে XmlSerializer। আমি এটা কিভাবে করবো?

উত্তর:


216

এগুলি একসাথে রাখার জন্য - এটি আমার পক্ষে পুরোপুরি কার্যকর:

    // To Clean XML
    public string SerializeToString<T>(T value)
    {
        var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
        var serializer = new XmlSerializer(value.GetType());
        var settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;

        using (var stream = new StringWriter())
        using (var writer = XmlWriter.Create(stream, settings))
        {
            serializer.Serialize(writer, value, emptyNamespaces);
            return stream.ToString();
        }
    }

4
(var স্ট্রিম = নতুন স্ট্রিংয়েরাইটার ()) ব্যবহার করে var স্ট্রিম = নতুন স্ট্রিংয়েরাইটার () পরিবর্তন করা যেতে পারে; কোড বিশ্লেষণে ত্রুটি দেয় কারণ এটি xMLwriter দুবার নিষ্পত্তি করার চেষ্টা করে।
আর্চনা

4
@ আর্চনা যদি আপনি এটি করেন তবে এক্সএমএল রাইটার.ক্রিয়েট কল একটি ব্যতিক্রম নিক্ষেপ করে সেই ক্ষেত্রে স্ট্রিং রাইটারটিকে নিষ্পত্তি করা হবে না। একটি সম্ভাব্য সমাধান যা দূষিত XMLWriter লেখককে একটি আইডিসপোজ বাস্তবায়ন করে যা এই গ্যারান্টিটির সাথে খাপ খায় না যে দু'বার নিষ্পত্তি কার্যকর করা দ্বিতীয় কলটির জন্য কিছুই করার চেষ্টা করে না এবং এই প্রবাহটিতে অভ্যর্থনা স্থির করে দেয় যা using( writer )এই প্রশ্নে দেখা যাবে: stackoverflow.com/a/11192524/2144408
TamaMcGlinn

আপনি টাইপ-প্যারামিটার টি কীসের জন্য ব্যবহার করছেন?
জেস্পার

25

XmlSerializer.Serializeপদ্ধতিটি ওভারলোড ব্যবহার করুন যেখানে আপনি কাস্টম নেমস্পেসগুলি নির্দিষ্ট করতে পারেন এবং এটি সেখানে পাস করতে পারেন।

var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);

নাল বা খালি অ্যারে পাস করা কৌতুকটি করবে না


7
দয়া করে মনে রাখবেন যে আমি যা চেয়েছিলাম তা পেতে আপনার এই উত্তরটি @ টোবসনের উত্তরের সাথে একত্রিত করতে হবে - সত্যিই ক্লিন এক্সএমএল!
গ্রাজেনিও

14

আপনি এক্সএমএল রাইটারসেটেটিংগুলি ব্যবহার করতে পারেন এবং এমএসডিএন- তে বর্ণিত হিসাবে সম্পত্তি OmitXMLDeclaration টি সত্য হিসাবে সেট করতে পারেন । তারপরে এখানে বর্ণিত হিসাবে এক্সএমএলসিরালাইজার.শিরাইজ (এক্সএমএল রাইটার, অবজেক্টটোসরিজাল) ব্যবহার করুন


0

এটি স্ট্রিংয়ের পরিবর্তে কোনও ফাইলকে এক্সএমএল লিখবে। অবজেক্টের টিকিট হ'ল সেই বস্তুটি যা আমি সিরিয়াল করছি।

নাম স্থান ব্যবহৃত:

using System.Xml;
using System.Xml.Serialization;

কোড:

XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });

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

XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    OmitXmlDeclaration = true
};

using (XmlWriter xmlWriter = XmlWriter.Create(fullPathFileName, settings))
{
    serializer.Serialize(xmlWriter, ticket, emptyNamespaces); 
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.