public override bool TrySetMember()

in src/YouTrackSharp/Issues/Issue.cs [505:558]


        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            // "field" setter when deserializing JSON into Issue object
            if (string.Equals(binder.Name, "field", StringComparison.OrdinalIgnoreCase) && value is JArray array)
            {   
                var fieldElements = array.ToObject<List<Field>>();
                foreach (var fieldElement in fieldElements)
                {
                    if (fieldElement.Value is JArray fieldElementAsArray)
                    {
                        // Map collection
                        // Heuristics for finding fields of the type List<Assignee>
                        var children = new List<JToken>(fieldElementAsArray.First.Children());
                        if (children.Count == 2 && children[0] is JProperty && ((JProperty)children[0]).Name == "value"
                            && children[1] is JProperty && ((JProperty)children[1]).Name == "fullName")
                        {
                            // For assignees, we can do a strong-typed list.
                            fieldElement.Value = fieldElementAsArray.ToObject<List<Assignee>>();
                        }
                        else
                        {
                            if (fieldElementAsArray.First is JValue &&
                                JTokenTypeUtil.IsSimpleType(fieldElementAsArray.First.Type))
                            {
                                // Map simple arrays to a collection of string
                                fieldElement.Value = fieldElementAsArray.ToObject<List<string>>();
                            }
                            else
                            {
                                // Map more complex arrays to JToken[]
                                fieldElement.Value = fieldElementAsArray;
                            }
                        }
                    }
                    
                    // Set the actual field
                    _fields[fieldElement.Name] = fieldElement;
                }
             
                return true;
            }
            
            // Regular setter
            if (_fields.TryGetValue(binder.Name, out var field) || _fields.TryGetValue(binder.Name.Replace("_", " "), out field))
            {
                field.Value = value;
            }
            else
            {
                _fields.Add(binder.Name, new Field { Name = binder.Name, Value = value });
            }
            
            return true;
        }