예제 #1
0
        private void OnSerialize(StreamingContext context)
        {
            // Clear the embeddedResourceProperties in order to make this object re-serializable.
            embeddedResourceProperties.Clear();
#if DNX451
            if (!ResourceConverter.IsResourceConverterContext(context))
            {
                return;
            }
#endif

            var ctx = HalJsonConverterContext.Create();
            if (!ctx.IsRoot)
            {
                return;
            }

            var curies = new List <CuriesLink>();

            RepopulateRecursively(ctx.HypermediaResolver, curies);

            if (Links != null)
            {
                Links = curies
                        .Distinct(CuriesLink.EqualityComparer)
                        .Select(x => x.ToLink())
                        .Union(Links)
                        .ToList();
            }

            ctx.IsRoot = false;
        }
예제 #2
0
        private void OnSerialize(StreamingContext context)
        {
            // Clear the embeddedResourceProperties in order to make this object re-serializable.
            embeddedResourceProperties.Clear();

            RepopulateHyperMedia();

            if (ResourceConverter.IsResourceConverterContext(context))
            {
                // put all embedded resources and lists of resources into Embedded for the _embedded serializer
                Embedded = new List <EmbeddedResource>();
                foreach (var prop in GetType().GetProperties().Where(p => IsEmbeddedResourceType(p.PropertyType)))
                {
                    var val = prop.GetValue(this, null);
                    if (val == null)
                    {
                        continue;
                    }
                    // remember embedded resource property for restoring after serialization
                    embeddedResourceProperties.Add(prop, val);
                    // add embedded resource to collection for the serializtion
                    var res = val as IResource;
                    var embeddedResource = new EmbeddedResource();
                    if (res != null)
                    {
                        embeddedResource.IsSourceAnArray = false;
                        embeddedResource.Resources.Add(res);
                        Embedded.Add(embeddedResource);
                    }
                    else
                    {
                        var resEnum = val as IEnumerable <IResource>;
                        if (resEnum != null)
                        {
                            var resList = resEnum.ToList();
                            if (resList.Count > 0)
                            {
                                embeddedResource.IsSourceAnArray = true;
                                foreach (var resElem in resList)
                                {
                                    embeddedResource.Resources.Add(resElem);
                                }
                                Embedded.Add(embeddedResource);
                            }
                        }
                    }
                    // null out the embedded property so it doesn't serialize separately as a property
                    prop.SetValue(this, null, null);
                }
                if (Embedded.Count == 0)
                {
                    Embedded = null;
                }
            }
        }
예제 #3
0
 private void OnSerialized(StreamingContext context)
 {
     if (ResourceConverter.IsResourceConverterContext(context))
     {
         // restore embedded resource properties
         foreach (var prop in embeddedResourceProperties.Keys)
         {
             prop.SetValue(this, embeddedResourceProperties[prop], null);
         }
     }
 }
예제 #4
0
        private void OnSerialize(StreamingContext context)
        {
            RepopulateHyperMedia();

            if (ResourceConverter.IsResourceConverterContext(context))
            {
                // put all embedded resources and lists of resources into Embedded for the _embedded serializer
                var resourceList = new List <IResource>();
                foreach (var prop in GetType().GetProperties().Where(p => IsEmbeddedResourceType(p.PropertyType)))
                {
                    var val = prop.GetValue(this, null);
                    if (val != null)
                    {
                        // remember embedded resource property for restoring after serialization
                        embeddedResourceProperties.Add(prop, val);
                        // add embedded resource to collection for the serializtion
                        var res = val as IResource;
                        if (res != null)
                        {
                            resourceList.Add(res);
                        }
                        else
                        {
                            resourceList.AddRange((IEnumerable <IResource>)val);
                        }
                        // null out the embedded property so it doesn't serialize separately as a property
                        prop.SetValue(this, null, null);
                    }
                }
                foreach (var res in resourceList.Where(r => string.IsNullOrEmpty(r.Rel)))
                {
                    res.Rel = "unknownRel-" + res.GetType().Name;
                }
                Embedded = resourceList.Count > 0 ? resourceList.ToLookup(r => r.Rel) : null;
            }
        }