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; }
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; } } }
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); } } }
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; } }