code_junkie

Can you Instantiate an Object Instance from JSON in .NET?

Nov 11th, 2011
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. var person = new {
  2. FirstName = "Chris",
  3. LastName = "Johnson"
  4. };
  5.  
  6. T deserialize<T>(string jsonStr, T obj) { /* ... */}
  7.  
  8. var jsonString = "{FirstName='Chris', LastName='Johnson, Other='unused'}";
  9. var person = deserialize(jsonString, new {FirstName="",LastName=""});
  10. var x = person.FirstName; //strongly-typed
  11.  
  12. var obj = ParseJsonToDictionary("{FirstName: "Chris", "Address":{Street:"My Street",Number:123}}");
  13.  
  14. // Access the Address.Number value
  15. object streetNumber = ((Dictionary<string, object>)obj["Address"])["Number"];
  16.  
  17. public static Dictionary<string, object> ParseJsonToDictionary(string json)
  18. {
  19. var d = new Dictionary<string, object>();
  20.  
  21. if (json.StartsWith("{"))
  22. {
  23. json = json.Remove(0, 1);
  24. if (json.EndsWith("}"))
  25. json = json.Substring(0, json.Length - 1);
  26. }
  27. json.Trim();
  28.  
  29. // Parse out Object Properties from JSON
  30. while (json.Length > 0)
  31. {
  32. var beginProp = json.Substring(0, json.IndexOf(':'));
  33. json = json.Substring(beginProp.Length);
  34.  
  35. var indexOfComma = json.IndexOf(',');
  36. string endProp;
  37. if (indexOfComma > -1)
  38. {
  39. endProp = json.Substring(0, indexOfComma);
  40. json = json.Substring(endProp.Length);
  41. }
  42. else
  43. {
  44. endProp = json;
  45. json = string.Empty;
  46. }
  47.  
  48. var curlyIndex = endProp.IndexOf('{');
  49. if (curlyIndex > -1)
  50. {
  51. var curlyCount = 1;
  52. while (endProp.Substring(curlyIndex + 1).IndexOf("{") > -1)
  53. {
  54. curlyCount++;
  55. curlyIndex = endProp.Substring(curlyIndex + 1).IndexOf("{");
  56. }
  57. while (curlyCount > 0)
  58. {
  59. endProp += json.Substring(0, json.IndexOf('}') + 1);
  60. json = json.Remove(0, json.IndexOf('}') + 1);
  61. curlyCount--;
  62. }
  63. }
  64.  
  65. json = json.Trim();
  66. if (json.StartsWith(","))
  67. json = json.Remove(0, 1);
  68. json.Trim();
  69.  
  70.  
  71. // Individual Property (Name/Value Pair) Is Isolated
  72. var s = (beginProp + endProp).Trim();
  73.  
  74.  
  75. // Now parse the name/value pair out and put into Dictionary
  76. var name = s.Substring(0, s.IndexOf(":")).Trim();
  77. var value = s.Substring(name.Length + 1).Trim();
  78.  
  79. if (name.StartsWith(""") && name.EndsWith("""))
  80. {
  81. name = name.Substring(1, name.Length - 2);
  82. }
  83.  
  84. double valueNumberCheck;
  85. if (value.StartsWith(""") && value.StartsWith("""))
  86. {
  87. // String Value
  88. d.Add(name, value.Substring(1, value.Length - 2));
  89. }
  90. else if (value.StartsWith("{") && value.EndsWith("}"))
  91. {
  92. // JSON Value
  93. d.Add(name, ParseJsonToDictionary(value));
  94. }
  95. else if (double.TryParse(value, out valueNumberCheck))
  96. {
  97. // Numeric Value
  98. d.Add(name, valueNumberCheck);
  99. }
  100. else
  101. d.Add(name, value);
  102. }
  103.  
  104. return d;
  105. }
Add Comment
Please, Sign In to add comment