নিউটোনসফ্ট কোডটি। নেট কোর 3 এ সিস্টেম.টেক্সট.জেসন তে রূপান্তর করা J জবজেক্ট.পার্স এবং জসনপ্রপার্টি এর সমতুল্য কী


12

আমি আমার নিউটসনফট বাস্তবায়নটিকে। নেট কোর 3.0 এ নতুন জেএসএন লাইব্রেরিতে রূপান্তর করছি। আমার কাছে নিম্নলিখিত কোড রয়েছে

public static bool IsValidJson(string json)
{
    try
    {                
        JObject.Parse(json);
        return true;
    }
    catch (Exception ex)
    {
        Logger.ErrorFormat("Invalid Json Received {0}", json);
        Logger.Fatal(ex.Message);
        return false;
    }
}

আমি এর জন্য কোনও সমমান খুঁজে পাচ্ছি না am JObject.Parse(json);

এছাড়াও বৈশিষ্ট্য JsonPropertyসমতুল্য কি হবে

public class ResponseJson
{
    [JsonProperty(PropertyName = "status")]
    public bool Status { get; set; }
    [JsonProperty(PropertyName = "message")]
    public string Message { get; set; }
    [JsonProperty(PropertyName = "Log_id")]
    public string LogId { get; set; }
    [JsonProperty(PropertyName = "Log_status")]
    public string LogStatus { get; set; }

    public string FailureReason { get; set; }
}

আরও একটি জিনিস আমি এর সমতুল্য সন্ধান করব Formating.None


আমি যা বুঝতে পেরেছি তা সরল স্তরের জসনের পক্ষে এটি সত্যই সোজা। যেখানে আমরা কিছু নেস্টেড জসন, কিছু সময়ের ফর্ম্যাট, ডিফল্ট মান, অভিধানের সরাসরি জসন তৈরি ইত্যাদি ব্যবহার করেছি সেগুলি রূপান্তর করার আগে এবং পরে ফলাফলের তুলনা করার জন্য আমাদের যত্ন নিতে হবে এবং যথাযথ ইউনিট টেস্টিং করতে হবে
কামরান শহীদ

উত্তর:


15

আপনি এখানে কয়েকটি প্রশ্ন জিজ্ঞাসা করছেন:

  1. আমি এর জন্য কোনও সমমান খুঁজে পাচ্ছি না am JObject.Parse(json);

    আপনি ব্যবহার করতে পারেন JsonDocumentথেকে পার্স এবং কোন তাদেরকে JSON পরীক্ষা তার দিয়ে শুরু RootElement। মূল উপাদানটি এমন এক ধরণের JsonElementযা কোনও জেএসওএন মান (আদিম বা না) উপস্থাপন করে এবং নিউটনসফ্টের সাথে মিল রাখে JToken

    তবে এই ডকুমেন্টেশন মন্তব্যটি নোট করুন :

    এই শ্রেণিটি উচ্চ-ব্যবহারের দৃশ্যে আবর্জনা সংগ্রাহকের (জিসি) প্রভাব কমাতে পুলড মেমরি থেকে সংস্থানগুলি ব্যবহার করে। এই অবজেক্টটি সঠিকভাবে নিষ্পত্তি করতে ব্যর্থ হওয়ার ফলে মেমরিটি পুলটিতে ফিরে না আসার কারণ হবে, যা কাঠামোর বিভিন্ন অংশ জুড়ে জিসি প্রভাব বাড়িয়ে তুলবে।

    যখন আপনার JsonElementনথির জীবদ্দশায় বাইরের কোনও ব্যবহারের প্রয়োজন হয় , আপনাকে অবশ্যই এটি ক্লোন করতে হবে:

    আসলটির JsonElementআজীবন পেরিয়ে নিরাপদে সংরক্ষণ করা যায় এমন একটি পান JsonDocument

    এছাড়াও নোট করুন যে JsonDocumentবর্তমানে কেবল পঠনযোগ্য এবং JSON তৈরি বা সংশোধন করার জন্য একটি API সরবরাহ করে না। একটি খোলামেলা ইস্যু আছে # 39922: লিখিতযোগ্য জসন ডিওএম এটি ট্র্যাক করছে।

    ব্যবহারের উদাহরণ নিম্নরূপ:

    //https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#using-declarations 
    using var doc = JsonDocument.Parse(json);
    
    //Print the property names.
    var names = doc.RootElement.EnumerateObject().Select(p => p.Name);
    Console.WriteLine("Property names: {0}", string.Join(",", names)); // Property names: status,message,Log_id,Log_status,FailureReason
    
    //Re-serialize with indentation.
    using var ms = new MemoryStream();
    using (var writer = new Utf8JsonWriter(ms, new JsonWriterOptions { Indented = true }))
    {
        doc.WriteTo(writer);
    }
    var json2 = Encoding.UTF8.GetString(ms.GetBuffer(), 0, checked((int)ms.Length));
    
    Console.WriteLine(json2);
  2. এছাড়াও বৈশিষ্ট্য JsonPropertyসমতুল্য কি হবে ?

    যে বৈশিষ্ট্যগুলি নিয়ন্ত্রণ JsonSerializerকরতে পারে সেগুলি System.Text.Json.Serializationनेमস্পেসে স্থাপন করা হয় এবং একটি বিমূর্ত বেস বর্গ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় JsonAttribute। বিপরীতে JsonProperty, কোনও অলমনবস অ্যাট্রিবিউট নেই যা সম্পত্তি ক্রমিকায়নের সমস্ত দিক নিয়ন্ত্রণ করতে পারে। পরিবর্তে নির্দিষ্ট দিকগুলি নিয়ন্ত্রণ করার জন্য নির্দিষ্ট বৈশিষ্ট্য রয়েছে।

    নেট কোর 3 হিসাবে এর মধ্যে রয়েছে:

    • [JsonPropertyNameAttribute(string)]:

      সিরিয়ালাইজেশন এবং ডিসিশায়ালাইজ করার সময় জেএসএনে উপস্থিত থাকা সম্পত্তি নাম নির্দিষ্ট করে। এটি দ্বারা নির্দিষ্ট করা কোনও নামকরণ নীতিকে ওভাররাইড করে JsonNamingPolicy

      আপনার ResponseJsonশ্রেণীর ক্রমিক নামগুলি নিয়ন্ত্রণ করতে আপনি এটি ব্যবহার করতে চান এমন বৈশিষ্ট্যটি :

      public class ResponseJson
      {
          [JsonPropertyName("status")]
          public bool Status { get; set; }
          [JsonPropertyName("message")]
          public string Message { get; set; }
          [JsonPropertyName("Log_id")]
          public string LogId { get; set; }
          [JsonPropertyName("Log_status")]
          public string LogStatus { get; set; }
      
          public string FailureReason { get; set; }
      }
    • [JsonConverterAttribute(Type)]:

      যখন কোনও প্রকারে স্থাপন করা হয়, নির্দিষ্ট রূপান্তরকারীটি ব্যবহৃত হবে না যদি না JsonSerializerOptions.Convertersসংগ্রহের সাথে সামঞ্জস্যপূর্ণ রূপান্তরকারী যুক্ত হয় বা JsonConverterAttributeএকই ধরণের কোনও সম্পত্তিতে অন্য কোনও না থাকে ।

      রূপান্তরকারীদের নথিভুক্ত অগ্রাধিকার নোট করুন - সম্পত্তির উপর বৈশিষ্ট্য, তারপরে বিকল্পগুলিতে রূপান্তরকারী সংগ্রহ, তারপরে বৈশিষ্ট্যযুক্ত অ্যাট্রিবিউট - নিউটোনসফট রূপান্তরকারীগুলির জন্য নথিভুক্ত ক্রম থেকে পৃথক , যা জসনকনভার্টরকে কোনও সদস্যের দ্বারা অ্যাট্রিবিউট দ্বারা সংজ্ঞায়িত করা হয়, তারপরে জসনকনভার্টার একটি শ্রেণীর একটি বৈশিষ্ট্য দ্বারা সংজ্ঞায়িত, এবং অবশেষে যে কোনও রূপান্তরকারীরা জসনসিরাইজারে পাস করেছে।

    • [JsonExtensionDataAttribute]- নিউটনসফট এর সাথে সম্পর্কিত [JsonExtensionData]

    • [JsonIgnoreAttribute]- নিউটনসফট এর সাথে সম্পর্কিত [JsonIgnore]

  3. মাধ্যমে JSON লেখার সময় Utf8JsonWriter , ইনডেন্টেশনটি সেট JsonWriterOptions.Indentedকরে trueবা দ্বারা সেটেল করা যায় false

    মাধ্যমে JSON এ সিরিয়ালাইজ করার সময় JsonSerializer.Serialize , ইন্ডেন্টেশনটি সেট JsonSerializerOptions.WriteIndentedকরে trueবা দ্বারা নিয়ন্ত্রণ করা যায় false

ডেমো ভাজা এখানে সিরিয়ালাইজেশন দেখাচ্ছেJsonSerializer এবং পার্স করে JsonDocument


ধন্যবাদ @ ডিবিসি। দেখে মনে হচ্ছে জসনডোকামেন্ট P পার্স আমার জন্য জোবজেক্ট এবং জেসনপ্রোপার্টিনেমের জন্য কাজ করবে other আগামীকাল আমার আবেদন রূপান্তর করবে এবং চেক করবে। আরও একটি জিনিস আমি ফর্ম্যাটিংয়ের সমতুল্য সন্ধান করব one ধন্যবাদ নেই
কামরান শহীদ

অনেক ধন্যবাদ @ ডিবিসি
কামরান শহীদ

2

এই লিঙ্কটি আপনাকে যেতে হবে, যার স্নিপেটগুলি নীচে আমি অনুলিপি করেছি।

https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/

WeatherForecast Deserialize(string json) { var options = new JsonSerializerOptions { AllowTrailingCommas = true }; return JsonSerializer.Parse<WeatherForecast>(json, options); } class WeatherForecast { public DateTimeOffset Date { get; set; } // Always in Celsius. [JsonPropertyName("temp")] public int TemperatureC { get; set; } public string Summary { get; set; } // Don't serialize this property. [JsonIgnore] public bool IsHot => TemperatureC >= 30; }


-1

আপনি আপনার অন্যান্য প্যাকেজ ইনস্টল একই সংস্করণ করতে পারেন

  Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson 

তারপর

services.AddControllers().AddNewtonsoftJson();

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