public static void Deserialize(this IJsonDeserializable obj, Stream content)
 {
     using (JsonDocument json = JsonDocument.Parse(content, default))
     {
         obj.ReadProperties(json.RootElement);
     }
 }
Пример #2
0
    public static void Deserialize(this IJsonDeserializable deserializable, Dictionary <string, object> json)
    {
        var fields = deserializable.GetType().GetJsonSerializedFields();

        json.Keys.ToList().ForEach(fieldName => {
            var field = fields.FirstOrDefault(f => f.Name == fieldName);

            if (field == null)
            {
                return;
            }

            var value = json[fieldName];

            field.SetValue(deserializable, DeserializeValue(value, field.FieldType));
        });

        if (deserializable is IJsonDeserializableCustom)
        {
            ((IJsonDeserializableCustom)deserializable).DeserializeCustom(json);
        }
    }
Пример #3
0
        public static void FromJsonString(this IJsonDeserializable jsonObject, string jsonString)
        {
            if (ReferenceEquals(jsonObject, null))
            {
                throw new ArgumentNullException("jsonObject");
            }

            using (var reader = JSON.GetReader(new StringReader(jsonString)))
            {
                while (reader.TokenType != JsonToken.StartObject)
                {
                    if (!reader.Read())
                    {
                        return;
                    }
                }

                try
                {
                    jsonObject.FromJson(reader);
                }
                catch (Exception ex)
                {
                    if (Log != null)
                    {
                        Log.WarnFormat(
                            "Unable to serialize component: {0} - {1}",
                            jsonObject.GetType().FullName,
                            ex.Message
                            );
                    }

                    throw;
                }
            }
        }