के मैं निम्नलिखित सेटअप के साथ एक मामले वर्ग है मान लेते हैं:संयोजन प्रकार और क्षेत्र serializers
case class Place(id:java.util.UUID, name:String)
मैं इस प्रकार इस प्रकार के लिए एक (! काम) serializer लिख सकते हैं:
class placeSerializer extends CustomSerializer[Place](format => (
{
case JObject(JField("id", JString(s)) :: JField("name",JString(x)) :: Nil) =>
Place(UUID.fromString(s), x)
},
{
case x:Place =>
JObject(
JField("id", JString(x.id.toString())) ::
JField("name", JString(x.name)) :: Nil)
}
)
)
लेकिन मान लीजिए कि मेरे केस क्लास में अंततः बहुत अधिक फ़ील्ड हैं, इससे मुझे एएसटी के साथ ऑब्जेक्ट की पूरी संरचना का आकलन करना पड़ सकता है, जो कुछ प्राइमेटिव को एन्कोड करने के लिए बहुत ही वर्बोज़ बनाता है।
json4s में फ़ील्ड सीरियलाइज़र होते हैं जो केवल विशिष्ट फ़ील्ड पर कार्य कर सकते हैं, बॉयलरप्लेट विधियों को नामों को आसानी से बदलने और फ़ील्ड को त्यागने के लिए शामिल किया गया है। ये है, तथापि, उनके serialize
और deserialize
आंशिक कार्यों के लिए निम्न हस्ताक्षर है:
case class FieldSerializer[A: Manifest](
serializer: PartialFunction[(String, Any), Option[(String, Any)]] = Map(),
deserializer: PartialFunction[JField, JField] = Map()
)
JField
के बाद से (प्रकार है कि एक प्रमुख representes -> json से वैल) अपने स्वयं के प्रकार और नहीं JValue
का एक उपवर्ग है, id
कुंजी को अपने नाम से UUID
पर सही ढंग से एन्कोड करने के लिए इन दो प्रकार के धारावाहिकों को कैसे जोड़ सकते हैं, जबकि अन्य क्षेत्रों (जो आदिम डेटाटाइप हैं) के डिफ़ॉल्ट हैंडलिंग को बनाए रखते हैं।
अनिवार्य रूप से मुझे एक प्रारूप श्रृंखला चाहिए जो Place
के भीतर फ़ील्ड को समझती है, यूयूआईडी है, बिना DefaultFormats
सभी क्षेत्रों के लिए एएसटी संरचना निर्दिष्ट किए बिना।
जो मैं विशेष रूप से ढूंढ रहा हूं वह JSONEncoder
and JSONDecoder
interfaces in python के समान पैटर्न की नकल करना है, जो फ़ील्ड के लिए marshalling को संभालने के तरीके को निर्धारित करने के लिए कुंजी नाम के साथ ही मूल्य प्रकार का उपयोग कर सकते हैं।
टिप्पणियों के बिना डाउनवोट्स मुझे उदास बनाते हैं :( – DeaconDesperado
यह भी जांचें http://stackoverflow.com/questions/23977779/is-there-an-out-of-the-box-format-for-uuid-in-json4s के लिए यूयूआईडी विशिष्ट मुद्दा – iwein