Exemple #1
0
        private VolumeDescription GetVolumeDescription(
            JsonSerializer serializer,
            JObject jObject,
            Dictionary <int, Func <string, VolumeDescription> > volumeDescriptionCreator,
            string defaultVolumeName)
        {
            JToken jToken;

            if (!jObject.TryGetValue("kind", out jToken))
            {
                return(null);
            }
            var provider = jToken.Value <int>();

            Func <string, VolumeDescription> creator;

            if (!volumeDescriptionCreator.TryGetValue(provider, out creator))
            {
                return(null);
            }

            VolumeDescription volumeDescription = creator(defaultVolumeName);

            serializer.Populate(jObject.CreateReader(), volumeDescription);
            return(volumeDescription);
        }
Exemple #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var properties = JObject.Load(reader);
            var isIndependentVolumeMount  = typeof(IndependentVolumeMount).IsAssignableFrom(objectType);
            var isApplicationScopedVolume = typeof(ApplicationScopedVolume).IsAssignableFrom(objectType);

            if (!(isIndependentVolumeMount || isApplicationScopedVolume))
            {
                throw new JsonSerializationException(
                          String.Format(
                              "Deserialization failure. Expected object of type {0} or {1}, but found object of type {2} instead.",
                              typeof(IndependentVolumeMount),
                              typeof(ApplicationScopedVolume),
                              objectType));
            }

            string volumeDescriptionPropertyName = isIndependentVolumeMount ? "volumeDescription" : "creationParameters";
            var    name            = this.GetPropertyValueSafe <string>(properties, "name");
            var    readOnly        = this.GetPropertyValueSafe <bool>(properties, "readOnly");
            var    destinationPath = this.GetPropertyValueSafe <string>(properties, "destinationPath");

            VolumeDescription volumeDescription        = null;
            JObject           volumeDescriptionJObject = null;
            JToken            volumeDescriptionJToken  = null;

            if (properties.TryGetValue(volumeDescriptionPropertyName, out volumeDescriptionJToken))
            {
                volumeDescriptionJObject = volumeDescriptionJToken as JObject;
            }
            if (volumeDescriptionJObject != null)
            {
                volumeDescription = this.GetVolumeDescription(
                    serializer,
                    volumeDescriptionJObject,
                    isIndependentVolumeMount ?
                    IndependentVolumeDescriptionCreator :
                    ApplicationScopedVolumeDescriptionCreator,
                    isIndependentVolumeMount ? null : name);
            }

            return(isIndependentVolumeMount ?
                   (VolumeMount)(new IndependentVolumeMount(
                                     name,
                                     destinationPath,
                                     readOnly,
                                     volumeDescription)) :
                   (VolumeMount)(new ApplicationScopedVolume(
                                     name,
                                     destinationPath,
                                     readOnly,
                                     volumeDescription)));
        }