ट्रेसिंग 0 जोड़ने से न्यूटनसॉफ्ट जोंस को रोकें [डुप्लिकेट]

Dec 01 2020

मैं NewtonSoft.Jsonपुस्तकालय के साथ एक अप्रत्याशित समस्या का सामना कर रहा हूं । ऐसा प्रतीत होता है कि यह दशमलव मानों में एक अनुगामी 0 जोड़ता है जिसमें दशमलव भाग नहीं है:

JsonConvert.SerializeObject(1m)

निम्न स्ट्रिंग लौटाएगा "1.0":।

हालांकि यह कई मामलों में एक समस्या नहीं है, मेरे मामले में, मैं उन परिशुद्धता के बारे में परवाह करता हूं जो उपयोगकर्ता प्रदान कर रहे हैं। यदि कोई उपयोगकर्ता प्रवेश करता है 1, तो मुझे 1अपने डेटाबेस में संग्रहीत करने की आवश्यकता है । यदि वह प्रदान करता है 1.0तो मुझे स्टोर करने की आवश्यकता है 1.0

मैं पुस्तकालय के अंतिम संस्करण का उपयोग कर रहा हूं: 12.0.3लेकिन मैंने पिछले सभी प्रमुख संस्करणों के साथ नीचे की कोशिश की 9.0.1, और वे सभी एक ही परिणाम उत्पन्न करते हैं।

मैंने लाइब्रेरी को ट्रेलिंग 0 (एक बग के रूप में रिपोर्ट किया गया, जिसे 11.X संस्करण में तय किया गया है) के बारे में कई प्रश्न देखे हैं, लेकिन कोई भी जोड़ने के बारे में नहीं।

क्या यह एक बग है जिसे मुझे रिपोर्ट करना चाहिए? मैं इस डिफ़ॉल्ट व्यवहार को कैसे ओवरराइड कर सकता हूं?

जवाब

1 DavidG Dec 01 2020 at 15:55

यह बग नहीं है, यह पुस्तकालय कैसे काम करता है। यदि आप इस व्यवहार को ओवरराइड करना चाहते हैं, तो आपको एक कस्टम प्रकार कनवर्टर की आवश्यकता होगी, उदाहरण के लिए:

public class DecimalJsonConverter : JsonConverter<decimal>
{
    public override decimal ReadJson(JsonReader reader, Type objectType, 
        decimal existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, 
        decimal value, JsonSerializer serializer)
    {
        // Customise how you want the decimal value to be output in here
        // for example, you may want to consider culture
        writer.WriteRawValue(value.ToString());
    }
}

और अब इस तरह धारावाहिक:

var settings = new JsonSerializerSettings
{
    Converters = new[] { new DecimalJsonConverter() }
};

var json = JsonConvert.SerializeObject(1m, settings);