আমি কেন 'সিস্টেম.আইও.স্ট্রাইম রাইটার' থেকে 'সিএসভিহেল্পার.আইরিশয়লাইজার' এ রূপান্তর করতে পারি না?


9

লোকের বিষয়বস্তুগুলি একটি সিএসভিফাইলে লেখার চেষ্টা করছে এবং তারপরে এটি রফতানি করা হোক, তবে আমি একটি বিল্ড ত্রুটি পেয়েছি এবং এটি ব্যর্থ হচ্ছে। ত্রুটিটি হ'ল:

cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'

নিশ্চিত না যে কেন এটি ঘটছে যদি না আমি নিশ্চিত যে আমি এটি বেশিরভাগ সময় এইভাবে করেছি।

private void ExportAsCSV()
{
    using (var memoryStream = new MemoryStream())
    {
        using (var writer = new StreamWriter(memoryStream))
        {
            using (var csv = new CsvHelper.CsvWriter(writer))
            {
                csv.WriteRecords(people);
            }

            var arr = memoryStream.ToArray();
            js.SaveAs("people.csv",arr);
        }
    }
}

তুমি নির্মল গেল কেন আপনি মনে করেন যে আপনার করা উচিত থেকে রূপান্তর করতে সক্ষম হতে StreamWriterথেকে ISerializer? StreamWriterনিজেই নেট নেট এর অংশ - এটি একটি নির্দিষ্ট তৃতীয় পক্ষের প্যাকেজ থেকে ইন্টারফেস প্রয়োগ করতে পারে না।
জন স্কিটি

1
এটি প্রস্তাব দেয় CsvHelper.CsvWriter(TextWriter)যে সুযোগ নেই। আপনি প্যাকেজের সঠিক সংস্করণটি পেয়ে যাচ্ছেন এবং StreamWriterএটি স্বাভাবিক শ্রেণি ( System.IO.StreamWriter) Double CsvWriterডাবল-চেক করতে "ডিফাইনশনে যান" ব্যবহার করুন ।
জেরোইন মোস্টার্ট

@ JeroenMostert আপনি কি CSVWriter চেক করতে চেয়েছিলেন? আমি করেছি এবং এটি CSVhelper শ্রেণীর অন্তর্ভুক্ত যা CsvHelper.Configration ব্যবহার করে ব্যবহার করে; CsvHelper.TypeConversion ব্যবহার করে; সিস্টেম ব্যবহার করে; সিস্টেম.কলেশন ব্যবহার করে; সিস্টেম.কলেশন.জেনারিক ব্যবহার করে; System.Dynamic ব্যবহার করে; সিস্টেম.গ্লোবালাইজেশন ব্যবহার করে; System.IO ব্যবহার করে; System.Threading.Tasks ব্যবহার করে;
অ্যান্ডি স্টাভ

হ্যাঁ, তবে সংকলক আপনাকে যা বলছে তা হ'ল এটি কোনও CsvWriterকনস্ট্রাক্টরকে অনুরোধ করছে ISerializerএবং কোনও রূপান্তর নেই বলে ব্যর্থ হচ্ছে। এটি CsvWriterযে কনস্ট্রাক্টরকে গ্রহণ করে তা গ্রহণ করা উচিত TextWriter, যেহেতু এর StreamWriterউত্তরাধিকার সূত্রে প্রাপ্ত হয়, সুতরাং যে কোনও নির্মাণকারীর অনুপস্থিত (যে কারণেই হোক) বা সংকলকের ওভারলোড রেজোলিউশনটি ভেঙে গেছে (সামান্য কম সম্ভাব্য, তবে অদ্ভুত জিনিসগুলি ঘটেছে)।
জেরোইন মোস্টার্ট 17:25

উত্তর:


29

13.0.0 সংস্করণ সহ একটি ব্রেকিং পরিবর্তন ছিল। স্থানীয়করণের সাথে অনেকগুলি সমস্যা রয়েছে, সুতরাং @ জোশক্লোজ ব্যবহারকারীদের যেগুলি CultureInfoতারা ব্যবহার করতে চান তা নির্দিষ্ট করতে হবে। আপনি এখন অন্তর্ভুক্ত করতে হবে CultureInfoতৈরি করা CsvReaderএবং CsvWriterhttps://github.com/JoshClose/CsvHelper/issues/1441

private void ExportAsCSV()
{
    using (var memoryStream = new MemoryStream())
    {
        using (var writer = new StreamWriter(memoryStream))
        {
            using (var csv = new CsvHelper.CsvWriter(writer, System.Globalization.CultureInfo.CurrentCulture)
            {
                csv.WriteRecords(people);
            }

            var arr = memoryStream.ToArray();
            js.SaveAs("people.csv",arr);
        }
    }
}

দ্রষ্টব্য: CultureInfo.CurrentCulture পূর্ববর্তী সংস্করণগুলিতে ডিফল্ট ছিল।

বিবেচনা

  • CultureInfo.InvariantCulture- আপনি যদি ফাইলটি লেখা এবং পড়া উভয়ই নিয়ন্ত্রণ করেন। এইভাবে ব্যবহারকারীরা তাদের কম্পিউটারে যে সংস্কৃতি রেখেছেন তা বিবেচ্য নয়।
  • CultureInfo.CreateSpecificCulture("en-US")- আপনার প্রয়োজন হলে ব্যবহারকারীর সংস্কৃতি থেকে আলাদা কোনও নির্দিষ্ট সংস্কৃতির জন্য কাজ করা উচিত ।

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