का उपयोग कर ईएफ 4.1 इकाइयों को सीरियलाइज करना मैं एमवीसी 3, रेजर व्यू इंजन, वर्क यूनिट ऑफ वर्क के साथ रिपोजिटरी पैटर्न का उपयोग कर एक एप्लीकेशन बना रहा हूं और अपना डेटा मॉडल परिभाषित करने के लिए पहले ईएफ 4.1 कोड का उपयोग कर रहा हूं।JSON.Net
यहां कुछ पृष्ठभूमि है (यदि आप चाहें तो उस पर चमक लें)।
एप्लिकेशन स्वयं ही इंट्रानेट 'मेनू' है।
2 मुख्य संस्थाओं MenuItem और विभाग जिनमें से कर रहे हैं:
- MenuItem कई विभागों हो सकता है
- विभागों कई MenuItems हो सकता है
- MenuItem एक माता पिता
इस प्रकार मैंने अपनी संस्थाओं को परिभाषित किया है
public class MenuItem
{
public int MenuItemId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public virtual ICollection<Department> Departments { get; set; }
public int? ParentId { get; set; }
public virtual MenuItem ParentMenuItem { get; set; }
}
public class Department
{
public int DepartmentId { get; set; }
public string Name { get; set; }
public virtual ICollection<MenuItem> MenuItems { get; set; }
}
मैं मेनू इटैम के लिए स्वयं संदर्भ को कई संदर्भों को परिभाषित करने के लिए फ़्लुएंटापी का उपयोग कर रहा हूं।
जो मुद्दा मैं कर रहा हूं वह जेएसओएन के माध्यम से दृश्य में मेनूइटम को पास कर रहा है। केंद्रीय मुद्दे यह है कि मेरे पास मेरी इकाइयों के बीच एक परिपत्र संदर्भ है जो JSON पार्सर में निर्मित नहीं हो सकता है और मेरे पास आलसी लोडिंग और प्रॉक्सी पीढ़ी अभी भी सक्षम है।
मैं अपने JSON Serializer के रूप में Nuget से JSON.net लाइब्रेरी का उपयोग कर रहा हूं क्योंकि यह परिपत्र संदर्भ समस्या के चारों ओर एक अच्छा तरीका प्रतीत होता है। अब मैं अनिश्चित हूं कि प्रॉक्सी पीढ़ी के मुद्दे को कैसे ठीक किया जाए। वर्तमान में धारावाहिक The RelationshipManager object could not be serialized. This type of object cannot be serialized when the RelationshipManager belongs to an entity object that does not implement IEntityWithRelationships.
क्या कोई इस से मेरी सहायता कर सकता है? अगर मैं प्रॉक्सी पीढ़ी को बंद कर देता हूं, तो मुझे मेनू मेनू के सभी बच्चों को लोड करने का समय लगता है, इसलिए मैं इसे छोड़ने के लिए उत्सुक हूं। मैंने एक उचित राशि पढ़ी है और कई अलग-अलग उत्तरों के रूप में प्रतीत होता है जिसमें संस्थाओं को किसी अन्य वस्तु में प्रक्षेपित करना और उस आदि को क्रमबद्ध करना आदि आदर्श रूप से RelonManager ऑब्जेक्ट को अनदेखा करने के लिए JSON.net को कॉन्फ़िगर करने का कोई तरीका होगा?
अद्यतन
यहाँ मैं एक JSON.Net के लिए कस्टम ContractResolver serializer के रूप में इस्तेमाल किया है। ऐसा लगता है कि मेरी समस्या हल हो गई है।
public class ContractResolver : DefaultContractResolver
{
private static readonly IEnumerable<Type> Types = GetEntityTypes();
private static IEnumerable<Type> GetEntityTypes()
{
var assembly = Assembly.GetAssembly(typeof (IEntity));
var types = assembly.GetTypes().Where(t => String.Equals(t.Namespace, "Namespace", StringComparison.Ordinal));
return types;
}
protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
if (!AllowType(objectType))
return new List<MemberInfo>();
var members = base.GetSerializableMembers(objectType);
members.RemoveAll(memberInfo => (IsMemberEntityWrapper(memberInfo)));
return members;
}
private static bool AllowType(Type objectType)
{
return Types.Contains(objectType) || Types.Contains(objectType.BaseType);
}
private static bool IsMemberEntityWrapper(MemberInfo memberInfo)
{
return memberInfo.Name == "_entityWrapper";
}
}
IEntity
एक इंटरफेस अपने सभी कोड पहले इकाई वस्तुओं को लागू है।
धन्यवाद Ladislav। आपके संदर्भित ब्लॉग पोस्ट से मैं एक कस्टम 'कॉन्ट्रैक्ट रिसेल्वर' लिखने में सक्षम था, जिसमें निर्दिष्ट करने के लिए कौन से सदस्य, और अधिक विशेष रूप से किस प्रकार के ऑब्जेक्ट प्रकार निकलते हैं। कुछ मामलों में, धारावाहिक होने के माध्यम से एक ढांचा वस्तु पारित की जा रही थी इसलिए मुझे ऑब्जेक्ट प्रकार की जांच करनी पड़ी। मैं अपने प्रश्न को मेरे द्वारा उपयोग किए गए कोड के साथ अपडेट कर दूंगा। इस पर टिप्पणी करने के लिए स्वतंत्र महसूस करें :) –