コード例 #1
0
        public override ControllerLayout Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            using var jsonDoc = JsonDocument.ParseValue(ref reader);
            var    rootElem     = jsonDoc.RootElement;
            string layoutName   = rootElem.GetProperty("LayoutID").GetString() !;
            string friendlyName = rootElem.GetProperty("FriendlyName").GetString() !;

            IEnumerable <PlatformId> platforms = rootElem.GetProperty("Platforms")
                                                 .EnumerateArray().Select(s => (PlatformId)s.GetString() !)
                                                 .ToImmutableArray();

            IEnumerable <(ControllerElement element, ControllerElementInfo info)> elements =
                from layoutElem in rootElem.GetProperty("Layout").EnumerateObject()
                let elementKey = ControllerElementExtensions.Parse(layoutElem.Name)
                                 let elementInfoElem = layoutElem.Value
                                                       let elementLabel = elementInfoElem.GetProperty("Label").GetString()
                                                                          let elementType = ControllerElementTypeExtensions.Parse(elementInfoElem.GetProperty("Type").GetString() !)
                                                                                            select(elementKey, elementInfo: new ControllerElementInfo(elementLabel, elementType));

            var layout = new ControllerElementCollection();

            foreach (var(elementKey, elementInfo) in elements)
            {
                layout.Add(elementKey, elementInfo);
            }

            return(new ControllerLayout(layoutName, platforms, friendlyName, layout));
        }
コード例 #2
0
        /// <inheritdoc/>
        protected override IControllerLayout Create(Type objectType, JObject jObject)
        {
            string layoutName   = jObject.Value <string>("LayoutID");
            string friendlyName = jObject.Value <string>("FriendlyName");
            IEnumerable <string> platformsWhitelist = jObject.Value <JArray>("Platforms").Values <string>();
            var  jlayout  = jObject.Value <JObject>("Layout");
            bool isDevice = jObject.Value <bool>("IsRealDevice");

            // var layout = new ControllerLayout(layoutName, platformsWhitelist, friendlyName, isDevice);
            var layout = new ControllerElementCollection();

            foreach (var controllerElement in
                     from layoutElements in jlayout.Properties()
                     let elementKey = Enums.Parse <ControllerElement>(layoutElements.Name)
                                      let elementLabel = layoutElements.Value.Value <string>("Label")
                                                         let elementType = Enums.Parse <ControllerElementType>(layoutElements.Value.Value <string>("Type"))
                                                                           select(elementKey: elementKey, elementInfo: new ControllerElementInfo(elementLabel, elementType)))
            {
                layout.Add(controllerElement.elementKey, controllerElement.elementInfo);
            }

            return(new ControllerLayout(layoutName, platformsWhitelist.Cast <PlatformId>(), friendlyName, layout, isDevice));
        }