2013-08-08 10 views
5

अच्छा दिन बदलें!जेसन .NET Serialization - संपत्ति मान

मैं वर्तमान में निम्न कोड के माध्यम से Newtonsoft Json Serializer उपयोग कर रहा हूँ:

 private string serializeAndIgnoreEmail(UserMembership obj) 
     { 
      var json = JsonConvert.SerializeObject(obj, Formatting.Indented, 
       new JsonSerializerSettings() { ContractResolver = new DocumentIdContractResolver() }); 
      return json; 
     } 
     private class DocumentIdContractResolver : CamelCasePropertyNamesContractResolver 
     { 
      protected override List<MemberInfo> GetSerializableMembers(Type objectType) 
      { 
       return base.GetSerializableMembers(objectType).Where(o => o.Name != "Email").ToList(); 
      } 
     } 

हर मैं एक वस्तु मैं 'serializeAndIgnoreEmail' विधि कॉल क्रमानुसार करने की जरूरत है। अब मैं प्रत्येक एन्क्रिप्टेड संस्करण के साथ प्रत्येक प्रॉपर्टी की सामग्री को प्रतिस्थापित करना चाहता हूं और मुझे नहीं पता कि यह कहां करें।

मेरा अनुमान 'DocumentIdContractResolver' में एक विधि को ओवरराइड करना होगा, लेकिन बहुत सारे CreateBlahBlahBlah हैं, जिन्हें मुझे उनके साथ काम करना बहुत मुश्किल लगता है।

क्या यह सही दृष्टिकोण है, अनुबंधResolver को संशोधित करना जारी रखने के लिए या मुझे कुछ और करने की कोशिश करनी चाहिए?

धन्यवाद!

उत्तर

7

कॉलिंग SerializeObject दो चीजें करता है: आपके द्वारा निर्दिष्ट ऑब्जेक्ट के आधार पर JSON टोकन का पेड़ बनाएं, और JSON युक्त स्ट्रिंग में उसे क्रमबद्ध करें।

आपकी सबसे अच्छी शर्त दो चरणों को अलग से करना होगा: पहले JSON.NET से JSON टोकन के पेड़ प्रदान करने के लिए पूछें, फिर मानों को संशोधित करें, फिर उन्हें JSON पर क्रमबद्ध करें।

मेरे सिर के ऊपर से:

namespace JsonEncryptionTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var obj = new 
       { 
        To = "Some name", 
        Subject = "A Subject", 
        Content = "A content" 
       }; 

      var jsonObject = JObject.FromObject(obj); 

      // modify the values. Just doing something here to amuse you. 
      var property = jsonObject.Property("Content"); 
      var value = (string) property.Value; 
      property.Value = value.ToLower(); 

      var json = jsonObject.ToString(); 

      Console.WriteLine(json); 
     } 
    } 
} 
1

मैं सटीक एक ही बात नहीं किया है। लेकिन एक वेब एपीआई प्रोजेक्ट के लिए मेरे मामले में, मुझे अपने संख्यात्मक मूल्यों के बजाय enum मानों के स्ट्रिंग नामों को क्रमबद्ध करने की आवश्यकता थी। मैंने थोड़ा सा शोध किया और महसूस किया कि जेसन फॉर्मेटर कन्वर्टर्स डिफ़ॉल्ट रूप से खाली हैं। तो मैंने जोड़ा:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter()); 

अपने मामले में, आपको एक कस्टम जेसन कनवर्टर लिखना होगा और इसे कन्वर्टर्स की सूची में जोड़ना होगा। आप यहां एक समान उदाहरण पा सकते हैं:

Custom Json Converter

संबंधित मुद्दे