JSON.NET ব্যবহার করে ক্রমিক ক্ষেত্রগুলির ক্রম


137

JSON.NET ব্যবহার করে সিরিয়ালযুক্ত JSON অবজেক্টে ক্ষেত্রগুলির ক্রম নির্দিষ্ট করার কোনও উপায় আছে কি ?

একটি একক ক্ষেত্র সর্বদা প্রথম প্রদর্শিত হবে তা নির্দিষ্ট করে বলা যথেষ্ট হবে।


7
আমি মনে করি তিনি সম্ভবত প্রথমে আইডি ক্ষেত্র (বা অনুরূপ) এবং তারপরে অন্যান্য সমস্ত ক্ষেত্র প্রদর্শন করতে আগ্রহী। এ-আই দিয়ে শুরু হওয়া ক্ষেত্রগুলির পরে এটি অনুসন্ধান করার চেয়ে শেষ ব্যবহারকারীদের জন্য এটি বন্ধুত্বপূর্ণ
মাইকেল বাহিগ

3
JSON বৈশিষ্ট্যগুলি অর্ডারড না হওয়ার জন্য সংজ্ঞায়িত করা হয়েছে। আমি মনে করি সিরিয়ালাইজেশনের সময় কোনও নির্দিষ্ট আউটপুট অর্ডারকে জোর করা (একেবারে জেএসএনকে চোখ বোলানোর স্বার্থে) জোর করা একদম ঠিক আছে, তবে deserialization সম্পর্কিত কোনও নির্দিষ্ট আদেশে একটি ডেপেন্ডেন্সি তৈরি করা একটি খারাপ সিদ্ধান্ত হবে।
দাবলিক

5
বেশ কয়েকটি বৈধ কারণ: (1) "" প্রকারের "সম্পত্তি যা জেএসএনের প্রথম সম্পত্তি হতে হবে তা নকল করা, (২) যতটা সম্ভব সংকুচিত জেএসএন জেনারেট করার চেষ্টা করছে
স্টিফেন চুং

4
আর একটি কারণ হতে পারে (3) একটি প্রচলিত উপস্থাপনা যা JSON সিনট্যাক্স ব্যবহার করে - একই জিনিসটিকে একই জেএসএন স্ট্রিং উত্পাদন করার নিশ্চয়তা দিতে হবে। গুণাবলীর একটি নির্বিচার ক্রম এর জন্য প্রয়োজনীয় পূর্বশর্ত।
মার্কাসচেবার

2
কেভিন, আপনি এই প্রশ্নের গৃহীত উত্তর আপডেট করতে পারেন?
মিলি স্মিথ

উত্তর:


255

সমর্থিত উপায় হ'ল JsonPropertyশ্রেণীর বৈশিষ্ট্যগুলিতে যে বৈশিষ্ট্যটির জন্য আপনি অর্ডার সেট করতে চান তাতে বৈশিষ্ট্যটি ব্যবহার করা। আরও তথ্যের জন্য JsonPropertyAtribute অর্ডার ডকুমেন্টেশন পড়ুন ।

JsonPropertyএকটি Orderমান পাস করুন এবং সিরিয়ালাইজারটি বাকীটির যত্ন নেবে।

 [JsonProperty(Order = 1)]

এটি খুব অনুরূপ

 DataMember(Order = 1) 

এর System.Runtime.Serializationদিন।

@ কেভিন-বাবককের একটি গুরুত্বপূর্ণ নোট এখানে

... 1 এ অর্ডার সেট করা কেবল তখনই কাজ করবে যদি আপনি অন্য সমস্ত বৈশিষ্ট্যে 1 এর চেয়ে বড় অর্ডার সেট করেন। ডিফল্টরূপে অর্ডার সেটিং ব্যতীত যে কোনও সম্পত্তি -1 এর অর্ডার দেওয়া হবে। সুতরাং আপনাকে অবশ্যই সমস্ত ক্রমিক বৈশিষ্ট্য এবং আদেশ দিতে হবে, বা আপনার প্রথম আইটেমটি -2 এ সেট করতে হবে


97
এর Orderসম্পত্তি ব্যবহার করে JsonPropertyAttributeক্ষেত্রগুলিকে ক্রমযুক্ত / ডিসরিয়ালাইজ করা ক্রম নিয়ন্ত্রণ করতে ব্যবহার করা যেতে পারে। তবে, 1 এ অর্ডার সেট করা কেবল তখনই কাজ করবে যদি আপনি অন্য সমস্ত বৈশিষ্ট্যে 1 এর চেয়ে বড় অর্ডার সেট করেন। ডিফল্টরূপে অর্ডার সেটিং ব্যতীত যে কোনও সম্পত্তি -1 এর অর্ডার দেওয়া হবে। সুতরাং আপনাকে অবশ্যই সমস্ত ক্রমিক বৈশিষ্ট্য এবং আদেশ দিতে হবে, বা আপনার প্রথম আইটেমটি -2 এ সেট করতে হবে।
কেভিন ব্যাবকক

1
এটি সিরিয়ালাইজেশনের জন্য কাজ করে, তবে অর্ডারটি ডিসিরিয়ালেসনের বিষয়ে বিবেচনা করা হচ্ছে না। ডকুমেন্টেশন অনুসারে, ক্রমের বৈশিষ্ট্য সিরিয়ালাইজেশন এবং deserialization উভয় জন্য ব্যবহৃত হয়। এখানে কি কাজ আছে?
ক্যানগোস্টা

1
জন্য অনুরূপ সম্পত্তি আছে JavaScriptSerializer
শিমি ওয়েটজ্যান্ডলার

4
@ ক্যাঙ্গোস্টা ডিসিরিয়ালাইজেশনের আদেশের বিষয়টি বিবেচনা করা উচিত না .. কিছু খুব "বিজোড়" প্রত্যাশার ক্ষেত্রে বাদে।
ব্যবহারকারী 2864740

1
অর্ডারকে ডিসেরায়ালাইজেশন হিসাবে সম্মান করার আকাঙ্ক্ষাকে ঘিরে অনুরূপ গিথুব ইস্যু আলোচনা পড়ুন: github.com/JamesNK/Newtonsoft.Json/issues/758 মূলত এর কোনও সম্ভাবনা নেই।
তিথ

126

আপনি আসলে এর পদ্ধতি প্রয়োগ IContractResolverবা ওভাররাইড করে অর্ডারটি নিয়ন্ত্রণ করতে পারেন ।DefaultContractResolverCreateProperties

এখানে আমার সরল বাস্তবায়নের একটি উদাহরণ IContractResolverযা বৈশিষ্ট্যগুলিকে বর্ণানুক্রমিক অর্ডার দেয়:

public class OrderedContractResolver : DefaultContractResolver
{
    protected override System.Collections.Generic.IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
    {
        return base.CreateProperties(type, memberSerialization).OrderBy(p => p.PropertyName).ToList();
    }
}

এবং তারপরে সেটিংসটি সেট করুন এবং অবজেক্টটিকে সিরিয়ালাইজ করুন এবং জেএসএন ক্ষেত্রগুলি বর্ণানুক্রমিক ক্রমে থাকবে:

var settings = new JsonSerializerSettings()
{
    ContractResolver = new OrderedContractResolver()
};

var json = JsonConvert.SerializeObject(obj, Formatting.Indented, settings);

11
এটি বেশ সহায়ক (+1) তবে একটি সতর্কতামূলক: এটি অভিধানের ক্রমিককরণটি এই ক্রিয়েটপ্রেরটিস কাস্টমাইজেশনটি ব্যবহার করে না বলে মনে হয়। তারা সূক্ষ্মরূপে সিরিয়ালযুক্ত তবে সাজানো শেষ হয় না। আমি ধরে নিয়েছি অভিধানের সিরিয়ালাইজেশন কাস্টমাইজ করার আলাদা উপায় আছে তবে আমি এটি খুঁজে পাইনি।
দ্রবীভূত

পারফেক্ট। আমি যা চেয়েছিলাম ঠিক তেমন করে। ধন্যবাদ।
ওয়েড হ্যাটলার

এটি একটি দুর্দান্ত সমাধান। আমার জন্য নিখুঁতভাবে কাজ করেছেন বিশেষত যখন 2 JSON অবজেক্ট পাশাপাশি পাশাপাশি রাখুন এবং বৈশিষ্ট্যগুলি এক সাথে রাখুন।
ভিন্স

16

আমার ক্ষেত্রে ম্যাটিয়াসের উত্তর কার্যকর হয়নি। CreatePropertiesপদ্ধতি কখনোই ডাকা হয়।

Newtonsoft.Jsonইন্টার্নালদের কিছু ডিবাগিংয়ের পরে , আমি আরও একটি সমাধান নিয়ে এসেছি।

public class JsonUtility
{
    public static string NormalizeJsonString(string json)
    {
        // Parse json string into JObject.
        var parsedObject = JObject.Parse(json);

        // Sort properties of JObject.
        var normalizedObject = SortPropertiesAlphabetically(parsedObject);

        // Serialize JObject .
        return JsonConvert.SerializeObject(normalizedObject);
    }

    private static JObject SortPropertiesAlphabetically(JObject original)
    {
        var result = new JObject();

        foreach (var property in original.Properties().ToList().OrderBy(p => p.Name))
        {
            var value = property.Value as JObject;

            if (value != null)
            {
                value = SortPropertiesAlphabetically(value);
                result.Add(property.Name, value);
            }
            else
            {
                result.Add(property.Name, property.Value);
            }
        }

        return result;
    }
}

2
ডিক্টস ব্যবহার করার সময় এটি ছিল আমাদের জন্য প্রয়োজনীয় ফিক্স।
noocyte

এটি অতিরিক্ত ডিসেরায়ালাইজেশন এবং সিরিয়ালাইজেশনের ওভারহেড যুক্ত করে। আমি একটি সমাধান যুক্ত করেছি যা সাধারণ ক্লাস, অভিধান এবং ExpandoObject (গতিশীল অবজেক্ট) এর জন্যও কাজ করবে
জয় শাহ

11

আমার ক্ষেত্রে নিয়াহের সমাধান কাজ করে না কারণ এটি অ্যারেগুলিতে হ্যান্ডেল করে না।

তার সমাধানের ভিত্তিতে এটিই আমি নিয়ে এসেছি

public static class JsonUtility
{
    public static string NormalizeJsonString(string json)
    {
        JToken parsed = JToken.Parse(json);

        JToken normalized = NormalizeToken(parsed);

        return JsonConvert.SerializeObject(normalized);
    }

    private static JToken NormalizeToken(JToken token)
    {
        JObject o;
        JArray array;
        if ((o = token as JObject) != null)
        {
            List<JProperty> orderedProperties = new List<JProperty>(o.Properties());
            orderedProperties.Sort(delegate(JProperty x, JProperty y) { return x.Name.CompareTo(y.Name); });
            JObject normalized = new JObject();
            foreach (JProperty property in orderedProperties)
            {
                normalized.Add(property.Name, NormalizeToken(property.Value));
            }
            return normalized;
        }
        else if ((array = token as JArray) != null)
        {
            for (int i = 0; i < array.Count; i++)
            {
                array[i] = NormalizeToken(array[i]);
            }
            return array;
        }
        else
        {
            return token;
        }
    }
}

এটি অতিরিক্ত ডিসেরায়ালাইজেশন এবং সিরিয়ালাইজেশনের ওভারহেড যুক্ত করে।
জয় শাহ

দুর্দান্ত সমাধান। ধন্যবাদ.
MaYaN

3

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

এবং যে কারও জন্য আপনি কেন JSON বৈশিষ্ট্যগুলিকে বর্ণমালা করতে চান তা ভাবতে, কাঁচা JSON ফাইলগুলির সাথে কাজ করা পুরোপুরি সহজ, বিশেষত প্রচুর সংখ্যার সম্পত্তি সহ শ্রেণীর ক্ষেত্রে, যদি তাদের আদেশ দেওয়া হয়।


2

এটি সাধারণ ক্লাস, অভিধান এবং এক্সপেন্ডোঅবজেক্ট (ডায়নামিক অবজেক্ট) এর জন্যও কাজ করবে।

class OrderedPropertiesContractResolver : DefaultContractResolver
    {
        protected override IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
        {
            var props = base.CreateProperties(type, memberSerialization);
            return props.OrderBy(p => p.PropertyName).ToList();
        }
    }



class OrderedExpandoPropertiesConverter : ExpandoObjectConverter
    {
        public override bool CanWrite
        {
            get { return true; }
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var expando = (IDictionary<string, object>)value;
            var orderedDictionary = expando.OrderBy(x => x.Key).ToDictionary(t => t.Key, t => t.Value);
            serializer.Serialize(writer, orderedDictionary);
        }
    }



var settings = new JsonSerializerSettings
        {
            ContractResolver = new OrderedPropertiesContractResolver(),
            Converters = { new OrderedExpandoPropertiesConverter() }
        };

var serializedString = JsonConvert.SerializeObject(obj, settings);

সিরিয়ালাইজেশনের সময় এটি কি ডিফল্ট ক্রম আচরণ ছিল না?
এমআর 5

1
কয়েকজনকে নষ্ট কয়েক মিনিট বাঁচাতে, নোট করুন যে দাবিটি সত্ত্বেও এই উত্তর অভিধানের জন্য কাজ করে না। CreatePropertiesঅভিধানের ক্রমিককরণের সময় অনুরোধ করা হয় না। ডিকশনারি এন্ট্রিগুলির মাধ্যমে যন্ত্রপাতি আসলে কী খনন করছে তার জন্য আমি JSON.net রেপো অন্বেষণ করেছি। overrideঅর্ডার দেওয়ার জন্য এটি কোনও বা অন্য কোনও কাস্টমাইজেশনের মধ্যে পড়ে না । এটি কেবলমাত্র বস্তুর গণকের দ্বারা প্রবেশিকাগুলিকে গ্রহণ করে। দেখে মনে হচ্ছে এটির জন্য আমাকে একটি নির্মাণ করতে SortedDictionaryবা SortedListজেএসওএন.এন.টাকে বাধ্য করতে হবে। বৈশিষ্ট্য সংক্রান্ত পরামর্শ দাখিল করা হয়েছে: github.com/JamesNK/Newtonsoft.Json/issues/2270
উইলিয়াম

2

আপনি যদি JsonProperty Orderপ্রতিটি শ্রেণীর সম্পত্তিতে কোনও বৈশিষ্ট্য রাখতে চান না , তবে আপনার নিজের কন্ট্রাক্টস রিসলভারটি করা খুব সহজ ...

আইসিএনট্র্যাকটরসোলভার ইন্টারফেসটি কীভাবে কাস্টমাইজ করার একটি উপায় সরবরাহ করে যে কীভাবে জসনসিরাইজারাইজাল আপনার ডিগ্রিবিহীন বৈশিষ্ট্যগুলি না রেখে JSON এ নেট।

এটার মত:

private class SortedPropertiesContractResolver : DefaultContractResolver
{
    // use a static instance for optimal performance
    static SortedPropertiesContractResolver instance;

    static SortedPropertiesContractResolver() { instance = new SortedPropertiesContractResolver(); }

    public static SortedPropertiesContractResolver Instance { get { return instance; } }

    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var properties = base.CreateProperties(type, memberSerialization);
        if (properties != null)
            return properties.OrderBy(p => p.UnderlyingName).ToList();
        return properties;
    }
}

বাস্তবায়ন:

var settings = new JsonSerializerSettings { ContractResolver = SortedPropertiesContractResolver.Instance };
var json = JsonConvert.SerializeObject(obj, Formatting.Indented, settings);

0

নিম্নলিখিত পুনরাবৃত্তির পদ্ধতিটি JObjectব্র্যান্ডের নতুন সাজানো অবজেক্ট গ্রাফ তৈরির পরিবর্তে একটি বিদ্যমান উদাহরণে অভ্যন্তরীণ টোকেন তালিকাকে সাজানোর জন্য প্রতিচ্ছবি ব্যবহার করে । এই কোডটি অভ্যন্তরীণ জসন.এনইটি বাস্তবায়নের বিশদগুলির উপর নির্ভর করে এবং উত্পাদনে ব্যবহার করা উচিত নয়।

void SortProperties(JToken token)
{
    var obj = token as JObject;
    if (obj != null)
    {
        var props = typeof (JObject)
            .GetField("_properties",
                      BindingFlags.NonPublic | BindingFlags.Instance)
            .GetValue(obj);
        var items = typeof (Collection<JToken>)
            .GetField("items", BindingFlags.NonPublic | BindingFlags.Instance)
            .GetValue(props);
        ArrayList.Adapter((IList) items)
            .Sort(new ComparisonComparer(
                (x, y) =>
                {
                    var xProp = x as JProperty;
                    var yProp = y as JProperty;
                    return xProp != null && yProp != null
                        ? string.Compare(xProp.Name, yProp.Name)
                        : 0;
                }));
    }
    foreach (var child in token.Children())
    {
        SortProperties(child);
    }
}

0

আসলে, যেহেতু আমার অবজেক্টটি ইতিমধ্যে একটি জবজেক্ট ছিল, তাই আমি নিম্নলিখিত সমাধানটি ব্যবহার করেছি:

public class SortedJObject : JObject
{
    public SortedJObject(JObject other)
    {
        var pairs = new List<KeyValuePair<string, JToken>>();
        foreach (var pair in other)
        {
            pairs.Add(pair);
        }
        pairs.OrderBy(p => p.Key).ForEach(pair => this[pair.Key] = pair.Value);
    }
}

এবং তারপরে এটি ব্যবহার করুন:

string serializedObj = JsonConvert.SerializeObject(new SortedJObject(dataObject));

0

আপনি যদি ক্লাস নিয়ন্ত্রণ করেন (অর্থাত্ লিখুন), বৈশিষ্ট্যগুলি বর্ণানুক্রমিক ক্রমে রাখুন এবং যখন JsonConvert.SerializeObject()ডাকা হবে তখন তারা বর্ণানুক্রমিক ক্রমে সিরিয়ালাইজ হবে ।


0

আমি একটি কমব্লেক্স অবজেক্টটি সিরিয়ালাইজ করতে এবং কোডগুলিতে সংজ্ঞায়িত হিসাবে বৈশিষ্ট্যগুলির ক্রম রাখতে চাই। আমি কেবল যুক্ত করতে পারি না [JsonProperty(Order = 1)]কারণ ক্লাস নিজেই আমার সুযোগের বাইরে।

এই সমাধানটি বিবেচনায় রাখে যে বেস শ্রেণিতে সংজ্ঞাযুক্ত বৈশিষ্ট্যগুলির উচ্চতর অগ্রাধিকার থাকা উচিত।

এটি বুলেটপ্রুফ নাও হতে পারে, যেহেতু কোথাও সংজ্ঞায়িত করা হয়নি যে MetaDataAttributeসঠিক ক্রমটি নিশ্চিত করে তবে এটি কাজ করে বলে মনে হয়। আমার ব্যবহারের ক্ষেত্রে এটি ঠিক আছে। যেহেতু আমি কেবল একটি স্বয়ংক্রিয় উত্পন্ন কনফিগার ফাইলের জন্য মানুষের পঠনযোগ্যতা বজায় রাখতে চাই।

public class PersonWithAge : Person
{
    public int Age { get; set; }
}

public class Person
{
    public string Name { get; set; }
}

public string GetJson()
{
    var thequeen = new PersonWithAge { Name = "Elisabeth", Age = Int32.MaxValue };

    var settings = new JsonSerializerSettings()
    {
        ContractResolver = new MetadataTokenContractResolver(),
    };

    return JsonConvert.SerializeObject(
        thequeen, Newtonsoft.Json.Formatting.Indented, settings
    );

}

public class MetadataTokenContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(
        Type type, MemberSerialization memberSerialization)
    {
        var props = type
           .GetProperties(BindingFlags.Instance
               | BindingFlags.Public
               | BindingFlags.NonPublic
           ).ToDictionary(k => k.Name, v =>
           {
               // first value: declaring type
               var classIndex = 0;
               var t = type;
               while (t != v.DeclaringType)
               {
                   classIndex++;
                   t = type.BaseType;
               }
               return Tuple.Create(classIndex, v.MetadataToken);
           });

        return base.CreateProperties(type, memberSerialization)
            .OrderByDescending(p => props[p.PropertyName].Item1)
            .ThenBy(p => props[p.PropertyName].Item1)
            .ToList();
    }
}


-1

যদি আপনি বিশ্বব্যাপী আদেশপ্রাপ্ত ক্ষেত্রগুলি সহ আপনার এপিআই কনফিগার করতে চান তবে দয়া করে ম্যাটিয়াস নর্ডবার্গের উত্তরটি একত্রিত করুন:

public class OrderedContractResolver : DefaultContractResolver
{
    protected override System.Collections.Generic.IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
    {
        return base.CreateProperties(type, memberSerialization).OrderBy(p => p.PropertyName).ToList();
    }
}

আমার উত্তর সহ এখানে:

কীভাবে এএসপি.নেট ওয়েব এপিআইকে সর্বদা জেএসএন ফেরত পাঠাতে বাধ্য করবেন?


-5

হালনাগাদ

আমি কেবল ডাউনভোটগুলি দেখেছি। এটি কীভাবে করবেন তার জন্য দয়া করে নীচে 'স্টিভ' থেকে উত্তরটি দেখুন।

মূল

আমি JsonConvert.SerializeObject(key)প্রতিবিম্বের মাধ্যমে পদ্ধতি কলটি অনুসরণ করেছি (যেখানে কীটি একটি আইলিস্ট ছিল) এবং দেখতে পেলাম যে জসনসিরাইজারআইটার্নালাইকার Sসিরাইজলিস্ট কল হয়ে যায়। এটি একটি তালিকা নেয় এবং মাধ্যমে লুপ করে

for (int i = 0; i < values.Count; i++) { ...

যেখানে মানগুলি IList পরামিতি আনা হয়।

সংক্ষিপ্ত উত্তরটি হ'ল ... না, ক্ষেত্রগুলি JSON স্ট্রিংয়ে তালিকাভুক্ত করা হয়েছে তা নির্ধারণের জন্য কোনও বিল্টই নেই।


18
সংক্ষিপ্ত উত্তর, তবে সম্ভবত পুরানো। স্টিভের উত্তর দেখুন (জেমস নিউটন-কিং সমর্থিত)
ব্র্যাড ব্রুস

-6

জেএসওএন ফর্ম্যাটে কোনও ক্ষেত্রের অর্ডার নেই তাই কোনও অর্ডার সংজ্ঞায়িত করার অর্থ হয় না।

{ id: 1, name: 'John' }সমান { name: 'John', id: 1 }(উভয়ই কঠোর সমতুল্য বস্তুর উদাহরণ উপস্থাপন করে)


12
@ ডারিন - তবে সিরিয়ালায়নের একটি আদেশ রয়েছে। "{আইডি: 1, নাম: 'জন'}" এবং "{নাম: 'জন', আইডি: 1}" স্ট্রিং হিসাবে আলাদা , যা এখানে আমি যত্ন করি। অবশ্যই, ডিসিজারাইজড করার সময় অবজেক্টগুলি সমতুল্য।
কেভিন মন্ট্রোজ

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

1
এটি পরীক্ষা করার জন্যও ভাল, ডিসরিয়ালাইজ করার পরিবর্তে কেবল স্ট্রিংগুলি দেখতে সক্ষম হওয়া।
স্টিভ

9
স্থিতিশীল সিরিয়ালকরণ আদেশটি ক্যাশে বৈধতার জন্যও কার্যকর। স্ট্রিংয়ের চেকসাম নেওয়া তুচ্ছ - সম্পূর্ণ বস্তুর গ্রাফের ক্ষেত্রে এটি সত্য নয়।
দ্রবীভূত

1
ইউনিট টেস্টগুলি করার সময় সিরিয়ালাইজেশন অর্ডারটিও কার্যকর so যাতে আপনি সহজেই বলতে পারেন যে জাসন বৈশিষ্ট্যের ক্রম পৃথক হলেও প্রত্যাশিত বনাম প্রকৃত প্রতিক্রিয়া স্ট্রিংগুলি সমান।
আনন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.