Created
March 22, 2016 23:59
-
-
Save rid00z/be387b548fd5cdd551d0 to your computer and use it in GitHub Desktop.
Text Blob Operation and Attribute
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class TextBlobOperations | |
{ | |
public static void GetTextBlobs(object element) | |
{ | |
if (element == null) | |
return; | |
var type = element.GetType(); | |
foreach (var relationshipProperty in type.GetTextBlobProperties()) | |
{ | |
var relationshipAttribute = relationshipProperty.GetAttribute<TextBlobAttribute>(); | |
if (relationshipAttribute is TextBlobAttribute) | |
{ | |
TextBlobOperations.GetTextBlobChild(element, relationshipProperty); | |
} | |
} | |
} | |
private static void GetTextBlobChild(object element, PropertyInfo relationshipProperty) | |
{ | |
if (element == null) | |
return; | |
var type = element.GetType(); | |
var relationshipType = relationshipProperty.PropertyType; | |
Debug.Assert(relationshipType != typeof(string), "TextBlob property is already a string"); | |
var textblobAttribute = relationshipProperty.GetAttribute<TextBlobAttribute>(); | |
var textProperty = type.GetRuntimeProperty(textblobAttribute.TextProperty); | |
Debug.Assert(textProperty != null && textProperty.PropertyType == typeof(string), "Text property for TextBlob relationship not found"); | |
var textValue = (string)textProperty.GetValue(element, null); | |
var value = textValue != null ? JsonConvert.DeserializeObject (textValue, relationshipType) : null; | |
relationshipProperty.SetValue(element, value, null); | |
} | |
public static void UpdateTextBlobs(object element) | |
{ | |
if (element == null) | |
return; | |
var type = element.GetType(); | |
foreach (var relationshipProperty in type.GetTextBlobProperties()) | |
{ | |
var relationshipAttribute = relationshipProperty.GetAttribute<TextBlobAttribute>(); | |
if (relationshipAttribute is TextBlobAttribute) | |
{ | |
TextBlobOperations.UpdateTextBlobProperty(element, relationshipProperty); | |
} | |
} | |
} | |
private static void UpdateTextBlobProperty(object element, PropertyInfo relationshipProperty) | |
{ | |
if (element == null) | |
return; | |
var type = element.GetType(); | |
var relationshipType = relationshipProperty.PropertyType; | |
Debug.Assert(relationshipType != typeof(string), "TextBlob property is already a string"); | |
var textblobAttribute = relationshipProperty.GetAttribute<TextBlobAttribute>(); | |
var textProperty = type.GetRuntimeProperty(textblobAttribute.TextProperty); | |
Debug.Assert(textProperty != null && textProperty.PropertyType == typeof(string), "Text property for TextBlob relationship not found"); | |
var value = relationshipProperty.GetValue(element, null); | |
var textValue = value != null ? JsonConvert.SerializeObject(value) : null; | |
textProperty.SetValue(element, textValue, null); | |
} | |
} | |
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] | |
public class TextBlobAttribute : IgnoreAttribute | |
{ | |
public TextBlobAttribute(string textProperty) | |
{ | |
TextProperty = textProperty; | |
} | |
public string TextProperty { get; private set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment