টেক্সটরিডার পরিবর্তে স্ট্রিং থেকে ডিসরিয়ালাইজ করুন


135

আমি আমার কোডটি থেকে পরিবর্তন করতে চাই:

string path = @"c:\Directory\test.xml";
XmlSerializer s = new XmlSerializer(typeof(Car));

TextReader r = new StreamReader(path);

Car car = (Car)s.Deserialize(r);
r.Close();

এমন কোডে রূপান্তর করুন যা কোনও এক্সএমএলকে একটি স্ট্রিংয়ে রূপান্তর করতে পারে এবং তারপরে স্ট্রিংটিকে বস্তু গাড়িতে রূপান্তর করবে।

এটা কি সম্ভব?

উত্তর:


259
public static string XmlSerializeToString(this object objectInstance)
{
    var serializer = new XmlSerializer(objectInstance.GetType());
    var sb = new StringBuilder();

    using (TextWriter writer = new StringWriter(sb))
    {
        serializer.Serialize(writer, objectInstance);
    }

    return sb.ToString();
}

public static T XmlDeserializeFromString<T>(this string objectData)
{
    return (T)XmlDeserializeFromString(objectData, typeof(T));
}

public static object XmlDeserializeFromString(this string objectData, Type type)
{
    var serializer = new XmlSerializer(type);
    object result;

    using (TextReader reader = new StringReader(objectData))
    {
        result = serializer.Deserialize(reader);
    }

    return result;
}

এটি ব্যবহার করতে:

//Make XML
var settings = new ObjectCustomerSettings();
var xmlString = settings.XmlSerializeToString();

//Make Object
var settings = xmlString.XmlDeserializeFromString<ObjectCustomerSettings>(); 

4
আরও ভাল: পাবলিক স্ট্যাটিক টি এক্সএমএলডিজারালাইজ ফ্রেম স্ট্রিং <টি> (স্ট্রিং অবজেক্টডাটা) {রিটার্ন (টি) এক্সএমএল ডিজাইরিয়াল ফ্রেমস্ট্রিং (অবজেক্টডাটা, টাইপফ (টি)); }
লি ট্রেভিল

1
আমি কি এই "সার্বজনীন স্ট্যাটিক স্ট্রিং এক্সএমএসআরশায়ালিজটিস্ট্রিং" (এই অবজেক্ট অবজেক্টআইন্সট্যান্স) থেকে অপসারণ করতে পারি ??
user278618

আপনি 'এটি' অপসারণ করতে পারেন, তবে তারপরে পদ্ধতিটি আর কোনও এক্সটেনশন পদ্ধতি নয়। পদ্ধতিটিকে একটি এক্সটেনশন পদ্ধতি তৈরি করে, এটি সম্ভব: স্ট্রিং এস = "ব্লাহ"! স্ট্রিং xML = s.XMLSerializeToString (); দ্রষ্টব্য: আপনার ব্যবহারের ক্ষেত্রে এক্সটেনশন পদ্ধতিগুলি ধারণ করে এমন স্ট্যাটিক শ্রেণীর নাম স্থানটি উল্লেখ করতে ভুলবেন না বা এক্সটেনশন পদ্ধতিগুলি কাজ করবে না! 'এটি' ব্যবহারের একমাত্র কারণ হ'ল এটিকে একটি এক্সটেনশন পদ্ধতি তৈরি করা, এটি মুছে ফেলা সম্পূর্ণ নিরাপদ।
এলমার

আপনি "এটি" মিস করছেন। আপনার দ্বিতীয় পদ্ধতিতে এটি এক্সটেনশন হিসাবে দেখানোর জন্য পেতে। public static T XmlDeserializeFromString<T>(this string objectData) { return (T)XmlDeserializeFromString(objectData, typeof(T)); }আমি প্রধান পোস্ট সম্পাদনা করতে যাচ্ছি।
ওমজিগ

StringReaderনিখোঁজ টুকরা। ধন্যবাদ।
প্রাইমো

83

যদি আপনার কাছে এক্সএমএল স্ট্রিং ভেরিয়েবলের মধ্যে থাকে তবে আপনি স্ট্রিংরেডার ব্যবহার করতে পারেন :

var xml = @"<car/>";
var serializer = new XmlSerializer(typeof(Car));
using (var reader = new StringReader(xml))
{
    var car = (Car)serializer.Deserialize(reader);
}

(var রিডার = নতুন স্ট্রিংরেডার (এক্সএমএল)) রিটার্ন (গাড়ি) নতুন এক্সএমএলসিরিয়ালাইজার (টাইপফ (কার)) ব্যবহার করে। ডিসিরিয়ালাইজ (রিডার);
এলেফেইস

15

1-লাইনার, একটি এক্সএমএল স্ট্রিং নেয় textএবং YourTypeপ্রত্যাশিত অবজেক্টের ধরণ হিসাবে। অন্যান্য উত্তরগুলির চেয়ে খুব আলাদা নয়, কেবল 1 লাইনে সংকুচিত:

var result =  (YourType)new XmlSerializer(typeof(YourType)).Deserialize(new StringReader(text));

4
আমি ব্যবহারের পরে স্ট্রিংরেডারটি বন্ধ করব।
সিডারলফ

8
static T DeserializeXml<T>(string sourceXML) where T : class
{
    var serializer = new XmlSerializer(typeof(T));
    T result = null;

    using (TextReader reader = new StringReader(sourceXML))
    {
        result = (T) serializer.Deserialize(reader);
    }

    return result;
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.