///
/// JObject和BsonValue之间的
///
public static class AdapterExtensions
{
///
///
///
///
///
public static BsonDocument ToBsonDocument(this JObject @object)
{
IDictionary elems = new Dictionary(); ;
foreach (var item in @object)
elems[item.Key] = ToBsonValue(item.Value);
return new BsonDocument(elems);
}
public static BsonArray ToBsonArray(this JArray array)
{
IList bvs = new List();
foreach (JToken item in array)
bvs.Add(ToBsonValue(item));
return new BsonArray(bvs);
}
private static BsonValue ToBsonValue(this JToken val)
{
if (val is JArray)
return ToBsonArray(val as JArray);
if (val is JObject)
return ToBsonDocument(val as JObject);
else
return ToBasicValue(val);
}
private static BsonValue ToBasicValue(JToken @object)
{
switch (@object.Type)
{
case JTokenType.Integer:
return BsonValue.Create(@object.ToObject());
case JTokenType.Float:
return BsonValue.Create(@object.ToObject());
case JTokenType.String:
return BsonValue.Create(@object.ToObject());
case JTokenType.Boolean:
return BsonValue.Create(@object.ToObject());
case JTokenType.Date:
return BsonValue.Create(@object.ToObject());
case JTokenType.Guid:
return BsonValue.Create(@object.ToObject());
case JTokenType.Null:
return null;
default:
throw new Exception("");
}
}
public static JObject ToJObject(this BsonDocument bsonDocument)
{
JObject elems = new JObject();
foreach (var item in bsonDocument)
{
Object data = item.Value;
elems[item.Name] = ToJsonValue(item.Value);
}
return elems;
}
public static JArray ToJArray(this BsonArray array)
{
IList bvs = new List();
foreach (var item in array)
bvs.Add(ToJsonValue(item));
return new JArray(bvs);
}
private static JToken ToJsonValue(this BsonValue val)
{
if (val is BsonArray)
return ToJArray(val as BsonArray);
if (val is BsonDocument)
return ToJObject(val as BsonDocument);
if (val is BsonNull)
return null;
return JToken.FromObject(val);
}
}