Used by the JsonResultsAdapter to provide information regarding the overall context of the currently executing operation.
Beispiel #1
0
    public JsonNodeInfo VisitNode(JObject node, MappingContext mappingContext, NodeContext nodeContext) {
      var result = new JsonNodeInfo();
      var idProp = node.Property("id");
      var modelsProp = node.Property("models");
      if (idProp != null && modelsProp != null) {
        node.Add("modelLinks", modelsProp.Value);
        modelsProp.Value = new JArray();
        result.ServerTypeNameInfo = new TypeNameInfo("Make", "");
        return result;
      }

      var makeProp = node.Property("make");
      if (idProp != null && makeProp != null) {
        node.Add("makeLink", makeProp.Value);
        makeProp.Value = null;
        var catsProp = node.Property("categories");
        if (catsProp != null) {
          var styleProps = catsProp["Vehicle Style"];
          var styles = styleProps.Select(t => t.Value<String>()).ToAggregateString(", ");
          node.Add("vehicleStyles", new JValue(styles));
        }
        result.ServerTypeNameInfo = new TypeNameInfo("Model", "");
        return result;
      }
      return result;
      //// Model parser
      //else if (node.id && node.makeId) {
      //    // move 'node.make' link so 'make' can be null reference
      //    node.makeLink = node.make;
      //    node.make = null;

      //    // flatten styles and sizes as comma-separated strings
      //    var styles = node.categories && node.categories["Vehicle Style"];
      //    node.vehicleStyles = styles && styles.join(", ");
      //    var sizes = node.categories && node.categories["Vehicle Size"];
      //    node.vehicleSizes = sizes && sizes.join(", ");

      //    return { entityType: "Model" };
      //}
    }
    public JsonNodeInfo VisitNode(JObject node, MappingContext mappingContext, NodeContext nodeContext) {
      var result = new JsonNodeInfo();

      JToken refToken;
      if (node.TryGetValue("$ref", out refToken)) {
        result.NodeRefId = refToken.Value<String>();
        return result;
      }

      JToken idToken;
      if (node.TryGetValue("$id", out idToken)) {
        result.NodeId = idToken.Value<String>();
      }

      JToken typeToken;
      if (node.TryGetValue("$type", out typeToken)) {
        var clrTypeName = typeToken.Value<String>();
        result.ServerTypeNameInfo = TypeNameInfo.FromClrTypeName(clrTypeName);
      }

      return result;
    }
    private SaveResult ProcessSaveResult(EntityManager entityManager, SaveOptions saveOptions, JNode jNode) {

      var kms = jNode.GetArray<KeyMapping>("KeyMappings");
      var keyMappings = kms.Select(km => ToEntityKeys(km, entityManager.MetadataStore)).ToDictionary(tpl => tpl.Item1, tpl => tpl.Item2);
      using (entityManager.NewIsLoadingBlock(false)) {
        keyMappings.ForEach(km => {
          var targetEntity = entityManager.GetEntityByKey(km.Key);
          targetEntity.EntityAspect.SetDpValue(km.Key.EntityType.KeyProperties[0], km.Value.Values[0]);
        });

        var entityNodes = jNode.GetToken<JArray>("Entities");

        var serializer = new JsonSerializer();
        var mappingContext = new MappingContext() {
          EntityManager = entityManager,
          MergeStrategy = MergeStrategy.OverwriteChanges,
          LoadingOperation = LoadingOperation.Save,
          JsonResultsAdapter = saveOptions.DataService.JsonResultsAdapter
        };
        var jsonConverter = new JsonEntityConverter(mappingContext);
        serializer.Converters.Add(jsonConverter);
        // serializer.Converters.Add(new StringEnumConverter());
        // Don't use the result of the Deserialize call to get the list of entities 
        // because it won't include entities added on the server.
        serializer.Deserialize<IEnumerable<IEntity>>(entityNodes.CreateReader());
        var allEntities = mappingContext.Entities;
        allEntities.ForEach(e => e.EntityAspect.AcceptChanges());
        return new SaveResult(allEntities, keyMappings);
      }

    }
 // currently the normalizeTypeNmFn is only needed during saves, not during queries. 
 public JsonEntityConverter(MappingContext mappingContext) {
   _mappingContext = mappingContext;
   _customSerializer = new JsonSerializer();
   _customSerializer.Converters.Add(new StringEnumConverter());
   _customSerializer.Converters.Add(new TimeSpanConverter());
 }