Установить Twin.Desired BindingException не может преобразовать JObject в TwinCollection - PullRequest
0 голосов
/ 28 февраля 2020

Я создал оболочку для двух требуемых свойств IoT-устройства на стороне сервера, которая выглядит следующим образом:

 public class Desired
    {
        private readonly Twin twin;

        public Desired(Twin twin)
        {
            this.twin = twin;
        }

        public Config Config
        {
            get
            {
                if (this.twin.Properties.Desired.Contains(ConfigProperty))
                {
                    TwinCollection config = this.twin.Properties.Desired[ConfigProperty]; 
                    // read the settings, evaluate, construct config
                    return result;
                }

                return null;
            }

            set
            {
                var result = new TwinCollection();
                result[nameof(Config.Name)] = value.Name;
                // Set other stuff

                this.twin.Properties.Desired[ConfigProperty] = result;
            }
        }
}

Это работает очень хорошо для моих целей за одним исключением. Если я прочитаю двойника из концентратора IoT, оберну его в Desired и запишу свойство Config (когда его еще нет в структуре JSON на стороне концентратора IoT, т.е. записываю его в первый раз), тогда я не смогу прочитайте это больше, не спасая близнеца между ними. Итак, вот так:

var twin = await this.registryManager.GetTwinAsync(serial);
var desired = new Desired(twin);
desired.Config = new Config(...);
var readOut = desired.Config; // THROWS AT LINE TwinCollection config = this.twin.Properties.Desired[ConfigProperty]; 

Я вижу в отладчике, что свойство Config там с правильными значениями. Но если я пытаюсь прочитать его самостоятельно, я получаю исключение BindingException: невозможно преобразовать JObject в TwinCollection. Если я сохраню двойник между ними, то он может быть прочитан без проблем.

Действительно, в отладчике, если я запрашиваю тип this.twin.Properties.Desired [ConfigProperty], это JObject! Как это может быть? В сеттере я передаю TwinCollection, так где же меняется информация о типе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...