Newtonsoft कोड को System.Text.Json in .net कोर में बदलना। जोबजेक्ट के बराबर है। दुर्लभ और JsonProperty


12

मैं अपने न्यूटनसॉफ्ट कार्यान्वयन को नए JSON लाइब्रेरी में .net कोर 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;
    }
}

मैं इसके लिए कोई समकक्ष नहीं पा रहा हूं 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


मैंने जो समझा वह साधारण स्तर के जोंस के लिए है, यह वास्तव में सीधा है। बातें जहाँ हम कुछ नेस्टेड json, कुछ समय के स्वरूप, मूलभूत मूल्यों, शब्दकोश प्रत्यक्ष json निर्माण आदि हम देखभाल करने के लिए है और इससे पहले कि और रूपांतरण के बाद परिणाम की तुलना के लिए उचित इकाई परीक्षण करने का उपयोग किया है के लिए
कामरान शाहिद

जवाबों:


15

आप यहाँ कुछ प्रश्न पूछ रहे हैं:

  1. मैं इसके लिए कोई समकक्ष नहीं पा रहा हूं JObject.Parse(json);

    आप किसी भी JSON JsonDocumentको पार्स और जांच करने के लिए उपयोग कर सकते हैं , इसके साथ शुरू कर सकते हैं RootElement। मूल तत्व उस प्रकार का है JsonElementजो किसी JSON मान (आदिम या नहीं) का प्रतिनिधित्व करता है और न्यूटनसॉफ्ट से मेल खाता है JToken

    लेकिन इस दस्तावेजी टिप्पणी पर ध्यान दें :

    यह वर्ग उच्च-उपयोग परिदृश्यों में कचरा संग्राहक (GC) के प्रभाव को कम करने के लिए जमा स्मृति से संसाधनों का उपयोग करता है। इस ऑब्जेक्ट को ठीक से निपटाने में विफलता के परिणामस्वरूप मेमोरी को पूल में नहीं लौटाया जाएगा, जो फ्रेमवर्क के विभिन्न हिस्सों में जीसी प्रभाव को बढ़ाएगा।

    जब आपको 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, कोई सर्वव्यापी विशेषता नहीं है जो संपत्ति क्रमांकन के सभी पहलुओं को नियंत्रित कर सकती है। इसके बजाय विशिष्ट पहलुओं को नियंत्रित करने के लिए विशिष्ट गुण हैं।

    .NET कोर 3 के अनुसार इनमें शामिल हैं:

    • [JsonPropertyNameAttribute(string)]:

      संपत्ति का नाम निर्दिष्ट करता है जो धारावाहिक और विचलन करते समय JSON में मौजूद है। यह निर्दिष्ट की गई किसी भी नामकरण नीति को ओवरराइड करता है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उसी प्रकार की संपत्ति पर एक और होता है ।

      ध्यान दें कि कन्वर्टर्स की प्रलेखित प्राथमिकता - संपत्ति पर विशेषता, फिर विकल्प में कन्वर्टर्स संग्रह, फिर टाइप ऑन एट्रीब्यूट - न्यूटनसॉफ्ट कन्वर्टर्स के लिए प्रलेखित आदेश से भिन्न होता है , जो कि एक सदस्य पर विशेषता द्वारा परिभाषित JsonConverter है, फिर JsonConverter एक वर्ग पर एक विशेषता द्वारा परिभाषित, और अंत में किसी भी कन्वर्टर्स JsonSerializer के लिए पारित कर दिया।

    • [JsonExtensionDataAttribute]- न्यूटनसॉफ्ट से मेल खाती है [JsonExtensionData]

    • [JsonIgnoreAttribute]- न्यूटनसॉफ्ट से मेल खाती है [JsonIgnore]

  3. JSON के माध्यम से लिखते समय Utf8JsonWriter, इंडेंटेशन JsonWriterOptions.Indentedको trueया पर सेट करके नियंत्रित किया जा सकता हैfalse

    जब JSON के माध्यम से अनुक्रमित किया जाता है JsonSerializer.Serialize, तो इंडेंटेशन JsonSerializerOptions.WriteIndentedको trueया पर सेट करके नियंत्रित किया जा सकता है false

डेमो फिडेल यहाँ के साथ क्रमांकन दिखा रहा है JsonSerializerऔर साथ पार्स कर रहा है JsonDocument


धन्यवाद @dbc लगता है कि JsonDocument.Parse मेरे लिए Jobject और JsonPropertyName के लिए अन्य काम करेगा। कल मेरे आवेदन को बदल देगा और जाँच करेगा। एक और बात मैं फॉर्मेटिंग के बराबर की तलाश में रहूंगा।
कोई

बहुत बहुत धन्यवाद @dbc
कामरान शाहिद

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 में उपलब्ध विकल्प के बारे में है
कामरान शाहिद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.