JSON में शून्य संपत्ति और छोड़ी गई संपत्ति के बीच अंतर का पता लगाना

मेरे पास एक पुरानी webservice है जो JSON प्राप्त करती है और यह DataContractJsonSerializer का उपयोग कर इसे सी # कक्षा में deserialises, हालांकि यह बदला जा सकता है।

इसका उद्देश्य संसाधनों पर फ़ील्ड अपडेट करना है

उदा .:

{
    "firstName" : "Martin"
}

मैं जरूरी नहीं कि सभी क्षेत्रों को अपडेट करना चाहता हूं, और मैं उन क्षेत्रों का पता लगाने का एक तरीका ढूंढने की उम्मीद कर रहा था जो JSON में निर्दिष्ट नहीं हैं।

मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है, हालांकि मुझे नहीं पता कि एक अनिर्दिष्ट क्षेत्र और एक फ़ील्ड के बीच अंतर कैसे बताना है जिसे शून्य में अपडेट किया जाना चाहिए

उदाहरण: (किसी भी फ़ील्ड को अपडेट न करें):

{}

बनाम: (पहले नाम फ़ील्ड को शून्य पर अपडेट करें)

{
    "firstName" : null
}

इस तक पहुंचने का सबसे अच्छा तरीका क्या है?

1
जोड़ा संपादित
विचारों: 1

2 उत्तर

मुझे लगता है कि आप कुछ यादृच्छिक स्ट्रिंग के साथ शुरू किए गए फ़ील्ड का उपयोग कर सकते हैं

public class TestClass
{
    public string firstName = "some string";
}

यदि आप {"firstName": null} का उपयोग करके deserialize, firstName शून्य हो जाएगा। यदि आप {} का उपयोग करके deserialize firstName नहीं बदलेगा ( कुछ स्ट्रिंग )

पीएस: यदि आप DataContractJsonSerializer का उपयोग कर रहे हैं तो DataContract या DataMember विशेषताएँ का उपयोग न करें

1
जोड़ा

मुझे यकीन नहीं है कि आपकी webservice का उपयोग कौन कर रहा है, लेकिन ऐसा लगता है कि आपको कुछ तय करना चाहिए और फिर अपने उपभोक्ताओं को बताएं कि यह कैसे काम करता है (उपभोक्ता को सही करने के लिए भरोसा करने के बजाय)। मुझे नहीं लगता कि सभी फ़ील्ड कहने के लिए बुद्धिमान होगा कि can या नहीं कर सकते को शून्य पर सेट किया जा सकता है, इसलिए प्रत्येक इंस्टेंस को अलग-अलग संभाला जाएगा।

0
जोड़ा
मैं आपसे सहमत हूं, और अभी भी नियम हैं कि क्या अपडेट किया जा सकता है/नहीं किया जा सकता है, और क्या शून्य/नामुमकिन है। लेकिन उन क्षेत्रों के लिए जिन्हें मैं उपभोक्ता को शून्य करने के लिए अद्यतन करने की अनुमति देता हूं, मुझे अभी भी उपभोक्ता के बीच अंतर का पता लगाने में सक्षम होना चाहिए कि वह क्षेत्र को अपडेट न करें (यानी इसे बिना छूटे छोड़ दें) बनाम इसे शून्य मान पर अपडेट करने का प्रयास कर रहा है। मुझे लगता है एलबी इसे कम या ज्यादा कम किया गया है।
जोड़ा लेखक Martin Booth, स्रोत