90
92
TwitterEntity entity = null;
93
while (reader.Read() && reader.Depth >= startDepth)
95
if (reader.TokenType == JsonToken.StartArray)
98
while (reader.Read() && reader.Depth > startDepth)
95
100
if (reader.TokenType == JsonToken.PropertyName && reader.Depth == startDepth + 1)
104
109
if (reader.TokenType == JsonToken.StartObject)
105
110
entity = new TwitterUrlEntity();
107
ReadFieldValue(reader, "url", entity, () => ((TwitterUrlEntity)entity).Url);
108
ReadFieldValue(reader, "display_url", entity, () => ((TwitterUrlEntity)entity).DisplayUrl);
109
ReadFieldValue(reader, "expanded_url", entity, () => ((TwitterUrlEntity)entity).ExpandedUrl);
112
TwitterUrlEntity tue = entity as TwitterUrlEntity;
115
ReadFieldValue(reader, "url", entity, () => tue.Url);
116
ReadFieldValue(reader, "display_url", entity, () => tue.DisplayUrl);
117
ReadFieldValue(reader, "expanded_url", entity, () => tue.ExpandedUrl);
113
121
case "user_mentions":
114
122
if (reader.TokenType == JsonToken.StartObject)
115
123
entity = new TwitterMentionEntity();
117
ReadFieldValue(reader, "screen_name", entity, () => ((TwitterMentionEntity)entity).ScreenName);
118
ReadFieldValue(reader, "name", entity, () => ((TwitterMentionEntity)entity).Name);
119
ReadFieldValue(reader, "id", entity, () => ((TwitterMentionEntity)entity).UserId);
125
TwitterMentionEntity tme = entity as TwitterMentionEntity;
128
ReadFieldValue(reader, "screen_name", entity, () => tme.ScreenName);
129
ReadFieldValue(reader, "name", entity, () => tme.Name);
130
ReadFieldValue(reader, "id", entity, () => tme.UserId);
124
135
if (reader.TokenType == JsonToken.StartObject)
125
136
entity = new TwitterHashTagEntity();
127
ReadFieldValue(reader, "text", entity, () => ((TwitterHashTagEntity)entity).Text);
138
TwitterHashTagEntity the = entity as TwitterHashTagEntity;
141
ReadFieldValue(reader, "text", entity, () => the.Text);
283
294
/// <param name="entities">The entities.</param>
284
295
/// <param name="entityName">Name of the entity.</param>
285
296
/// <param name="detailsAction">The details action.</param>
286
private static void WriteEntity<T>(JsonWriter writer, System.Collections.Generic.IList<T> entities, string entityName, Action<JsonWriter, T> detailsAction)
297
private static void WriteEntity<T>(JsonWriter writer, IEnumerable<T> entities, string entityName, Action<JsonWriter, T> detailsAction)
287
298
where T : TwitterEntity
289
300
// Note to people reading this code: Extra brackets exist to group code by json hierarchy. You're welcome.
473
private bool ReadFieldValue<TSource, TProperty>(JsonReader reader, string fieldName, TSource source, Expression<Func<TProperty>> property)
484
private void ReadFieldValue<TSource, TProperty>(JsonReader reader, string fieldName, TSource source, Expression<Func<TProperty>> property)
485
where TSource : class
477
489
if (reader == null || source == null)
482
494
var expr = (MemberExpression)property.Body;
483
495
var prop = (PropertyInfo)expr.Member;
485
497
TProperty value = (TProperty)prop.GetValue(source, null);
486
if (ReadFieldValue<TProperty>(reader, fieldName, ref value))
498
if (ReadFieldValue(reader, fieldName, ref value))
488
500
prop.SetValue(source, value, null);