public IAdaptiveCardElement FromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers, IList <IAdaptiveWarning> warnings) { AdaptiveActionSet answer = new AdaptiveActionSet(); var actionsArray = inputJson.GetNamedArray("actions"); foreach (JsonObject a in actionsArray.Select(i => i.GetObject())) { string title = a.GetNamedString("title"); answer.Actions.Add(new AdaptiveSubmitAction() { Title = title }); // AC bug: Default action parsers aren't present: https://github.com/Microsoft/AdaptiveCards/issues/2196 //string type = a.GetNamedString("type"); //var actionParser = actionParsers.Get("Action.OpenUrl"); //if (actionParser != null) //{ // var action = actionParser.FromJson(a, elementParsers, actionParsers, warnings); // if (action != null) // { // answer.Actions.Add(action); // } //} } return(answer); }
public static AdaptiveCard Parse(string json) { AdaptiveElementParserRegistration elementRegistration = new AdaptiveElementParserRegistration(); elementRegistration.Set("ActionSet", new ActionSetParser()); return(AdaptiveCard.FromJsonString(json, elementRegistration, null).AdaptiveCard); }
public IAdaptiveActionElement FromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers, IList <AdaptiveWarning> warnings) { JsonObject jsonSubmitAction = inputJson.GetNamedObject("internalSubmitAction"); var submitActionParser = actionParsers.Get("Action.Submit"); IAdaptiveActionElement submitAction = submitActionParser.FromJson(jsonSubmitAction, elementParsers, actionParsers, warnings); return(new TestCustomAction(submitAction) as IAdaptiveActionElement); }
public IAdaptiveCardElement FromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers, IList <AdaptiveWarning> warnings) { JsonObject jsonTextBlock = inputJson.GetNamedObject("internalTextBlock"); var textBlockParser = elementParsers.Get("TextBlock"); IAdaptiveCardElement textBlockElement = textBlockParser.FromJson(jsonTextBlock, elementParsers, actionParsers, warnings); return(new TestCustomElement(textBlockElement) as IAdaptiveCardElement); }
public void ActionParserRegistraton_CustomActionTest() { AdaptiveActionParserRegistration actionParserRegistration = new AdaptiveActionParserRegistration(); AdaptiveElementParserRegistration elementParserRegistration = new AdaptiveElementParserRegistration(); List <AdaptiveWarning> warnings = new List <AdaptiveWarning>(); actionParserRegistration.Set("TestCustomAction", new TestActionParser()); IAdaptiveActionParser testActionParserRetrieved = actionParserRegistration.Get("TestCustomAction"); Assert.IsNotNull(testActionParserRetrieved); Assert.IsNotNull(testActionParserRetrieved as TestActionParser); String testCard = "{" + " \"type\":\"AdaptiveCard\"," + " \"version\":\"1.0\"," + " \"body\":" + " [" + " ]," + " \"actions\":" + " [" + " {" + " \"type\":\"TestCustomAction\"," + " \"internalSubmitAction\":" + " {" + " \"type\": \"Action.Submit\"" + " }" + " }" + " ]" + "}"; AdaptiveCard card = AdaptiveCard.FromJsonString(testCard, elementParserRegistration, actionParserRegistration).AdaptiveCard; Assert.IsNotNull(card); Assert.AreEqual(1, card.Actions.Count); IAdaptiveActionElement action = card.Actions[0]; Assert.IsNotNull(action); Assert.AreEqual(ActionType.Custom, action.ActionType); Assert.AreEqual("TestCustomAction", action.ActionTypeString); TestCustomAction customElement = card.Actions[0] as TestCustomAction; Assert.IsNotNull(customElement); Assert.AreEqual(ActionType.Submit, customElement.InternalSubmitAction.ActionType); }
public void ElementParserRegistraton_DefaultElementsTest() { AdaptiveActionParserRegistration actionParserRegistration = new AdaptiveActionParserRegistration(); AdaptiveElementParserRegistration elementParserRegistration = new AdaptiveElementParserRegistration(); List <AdaptiveWarning> warnings = new List <AdaptiveWarning>(); JsonObject jsonObject; Assert.IsTrue(JsonObject.TryParse("{\"type\":\"ActionSet\",\"id\":\"ActionSetId\"}", out jsonObject)); Assert.AreEqual(ElementType.ActionSet, elementParserRegistration.Get("ActionSet").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Input.ChoiceSet\",\"id\":\"ChoiceSetId\", \"choices\":[{\"type\":\"Input.Choice\",\"title\":\"title\",\"value\":\"value\"}]}", out jsonObject)); Assert.AreEqual(ElementType.ChoiceSetInput, elementParserRegistration.Get("Input.ChoiceSet").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"ColumnSet\"}", out jsonObject)); Assert.AreEqual(ElementType.ColumnSet, elementParserRegistration.Get("ColumnSet").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Container\", \"items\":[]}", out jsonObject)); Assert.AreEqual(ElementType.Container, elementParserRegistration.Get("Container").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Input.Date\", \"id\":\"DateId\"}", out jsonObject)); Assert.AreEqual(ElementType.DateInput, elementParserRegistration.Get("Input.Date").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"FactSet\", \"facts\":[{\"title\":\"title\",\"value\":\"value\"}]}", out jsonObject)); Assert.AreEqual(ElementType.FactSet, elementParserRegistration.Get("FactSet").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Image\", \"url\":\"www.foo.com\"}", out jsonObject)); Assert.AreEqual(ElementType.Image, elementParserRegistration.Get("Image").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"ImageSet\", \"images\":[{\"type\":\"Image\", \"url\":\"www.foo.com\"}]}", out jsonObject)); Assert.AreEqual(ElementType.ImageSet, elementParserRegistration.Get("ImageSet").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Media\", \"sources\":[{\"mimeType\":\"foo\",\"url\":\"www.foo.com\"}]}", out jsonObject)); Assert.AreEqual(ElementType.Media, elementParserRegistration.Get("Media").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Input.Number\", \"id\":\"NumberId\"}", out jsonObject)); Assert.AreEqual(ElementType.NumberInput, elementParserRegistration.Get("Input.Number").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"TextBlock\",\"text\":\"Hello World\"}", out jsonObject)); Assert.AreEqual(ElementType.TextBlock, elementParserRegistration.Get("TextBlock").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Input.Text\", \"id\":\"TextId\"}", out jsonObject)); Assert.AreEqual(ElementType.TextInput, elementParserRegistration.Get("Input.Text").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Input.Time\", \"id\":\"TimeId\"}", out jsonObject)); Assert.AreEqual(ElementType.TimeInput, elementParserRegistration.Get("Input.Time").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Input.Toggle\", \"id\":\"ToggleId\", \"title\":\"title\"}", out jsonObject)); Assert.AreEqual(ElementType.ToggleInput, elementParserRegistration.Get("Input.Toggle").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ElementType); }
public void ElementParserRegistraton_CustomElementTest() { AdaptiveActionParserRegistration actionParserRegistration = new AdaptiveActionParserRegistration(); AdaptiveElementParserRegistration elementParserRegistration = new AdaptiveElementParserRegistration(); List <AdaptiveWarning> warnings = new List <AdaptiveWarning>(); elementParserRegistration.Set("TestCustomElement", new TestElementParser()); IAdaptiveElementParser testElementParserRetrieved = elementParserRegistration.Get("TestCustomElement"); Assert.IsNotNull(testElementParserRetrieved); Assert.IsNotNull(testElementParserRetrieved as TestElementParser); String testCard = "{" + " \"type\":\"AdaptiveCard\"," + " \"version\":\"1.0\"," + " \"body\":" + " [" + " {" + " \"type\":\"TestCustomElement\"," + " \"internalTextBlock\":" + " {" + " \"type\":\"TextBlock\"," + " \"text\":\"Here is some text\"" + " }" + " }" + " ]" + "}"; AdaptiveCard card = AdaptiveCard.FromJsonString(testCard, elementParserRegistration, actionParserRegistration).AdaptiveCard; Assert.IsNotNull(card); Assert.AreEqual(1, card.Body.Count); IAdaptiveCardElement cardElement = card.Body[0]; Assert.IsNotNull(cardElement); Assert.AreEqual(ElementType.Custom, cardElement.ElementType); Assert.AreEqual("TestCustomElement", cardElement.ElementTypeString); TestCustomElement customElement = card.Body[0] as TestCustomElement; Assert.IsNotNull(customElement); Assert.AreEqual(ElementType.TextBlock, customElement.InternalTextBlock.ElementType); }
public void ActionParserRegistraton_DefaultActionsTest() { AdaptiveActionParserRegistration actionParserRegistration = new AdaptiveActionParserRegistration(); AdaptiveElementParserRegistration elementParserRegistration = new AdaptiveElementParserRegistration(); List <AdaptiveWarning> warnings = new List <AdaptiveWarning>(); JsonObject jsonObject; Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Action.OpenUrl\", \"url\":\"http:\\\\www.foo.com\"}", out jsonObject)); Assert.AreEqual(ActionType.OpenUrl, actionParserRegistration.Get("Action.OpenUrl").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ActionType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Action.ShowCard\", \"card\":{\"type\":\"AdaptiveCard\", \"version\":\"1.0\"}}", out jsonObject)); Assert.AreEqual(ActionType.ShowCard, actionParserRegistration.Get("Action.ShowCard").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ActionType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Action.Submit\"}", out jsonObject)); Assert.AreEqual(ActionType.Submit, actionParserRegistration.Get("Action.Submit").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ActionType); Assert.IsTrue(JsonObject.TryParse("{\"type\":\"Action.ToggleVisibility\",\"targetElements\": [{\"elementId\":\"idToggle\"}]}", out jsonObject)); Assert.AreEqual(ActionType.ToggleVisibility, actionParserRegistration.Get("Action.ToggleVisibility").FromJson(jsonObject, elementParserRegistration, actionParserRegistration, warnings).ActionType); }
public IAdaptiveActionElement FromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers, IList <AdaptiveWarning> warnings) { return(new TestCustomAction() as IAdaptiveActionElement); }
internal static JsonParseToastResult ParseToast(string json, FeatureSet currFeatureSet) { JsonToastContent toastContent = null; JsonParseToastResult result = new JsonParseToastResult(); int payloadSize = System.Text.Encoding.UTF8.GetByteCount(json); if (payloadSize > PAYLOAD_SIZE_LIMIT) { result.Errors.Add(new ParseError(ParseErrorType.ErrorButRenderAllowed, $"Your payload exceeds the 5 KB size limit (it is {payloadSize.ToString("N0")} Bytes). Please reduce your payload, or else Windows will not display it.")); } var settings = new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Error, Error = new EventHandler <ErrorEventArgs>((sender, args) => { HandleError(result.Errors, args); }), ContractResolver = new DefaultContractResolver() { NamingStrategy = new JsonToastNamingStrategy() } }; try { toastContent = JsonConvert.DeserializeObject <JsonToastContent>(json, settings); if (toastContent.Type != "AdaptiveCard") { result.Errors.Add(new ParseError(ParseErrorType.ErrorButRenderAllowed, "\"type\": \"AdaptiveCard\" must be specified in your payload.")); } if (toastContent.Version == null) { result.Errors.Add(new ParseError(ParseErrorType.ErrorButRenderAllowed, "\"version\" property must be specified in your payload.")); } var actionReg = new AdaptiveActionParserRegistration(); // Can't override the Submit parser so can't know whether dev actually sent -ms-systemActivationType="dismiss" or if we translated it actionReg.Set("MsAction.Dismiss", new DismissActionParser(result.Errors)); actionReg.Set("MsAction.Snooze", new SnoozeActionParser(result.Errors)); AdaptiveElementParserRegistration elementRegistration = new AdaptiveElementParserRegistration(); elementRegistration.Set("ActionSet", new ActionSetParser()); var cardParseResult = AdaptiveCard.FromJsonString(json, elementRegistration, actionReg); toastContent.Card = cardParseResult.AdaptiveCard; foreach (var error in cardParseResult.Errors) { result.Errors.Add(new ParseError(ParseErrorType.ErrorButRenderAllowed, error.Message)); } foreach (var warning in cardParseResult.Warnings) { result.Errors.Add(new ParseError(ParseErrorType.Warning, warning.Message)); } } catch (Exception ex) { // Json parse exceptions are handled by the error handler and already reported if (!(ex is JsonReaderException)) { result.Errors.Add(new ParseError(ParseErrorType.Error, ex.Message)); } } result.Content = toastContent; return(result); }
protected abstract IAdaptiveActionElement ParseFromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers);
public IAdaptiveActionElement FromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers, IList <IAdaptiveWarning> warnings) { WarnAboutUnknownProperties(inputJson); return(ParseFromJson(inputJson, elementParsers, actionParsers)); }
protected override IAdaptiveActionElement ParseFromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers) { // If developer didn't provide title, use system provided title string title = GetString(inputJson, "title") ?? "Snooze"; // See if developer provided a snooze input id string inputId = GetString(inputJson, "snoozeTimeInputId") ?? ""; return(new AdaptiveSubmitAction() { Title = title, AdditionalProperties = new JsonObject() { { "-ms-systemActivationType", JsonValue.CreateStringValue("snooze") }, { "snoozeTimeInputId", JsonValue.CreateStringValue(inputId) } } }); }
protected override IAdaptiveActionElement ParseFromJson(JsonObject inputJson, AdaptiveElementParserRegistration elementParsers, AdaptiveActionParserRegistration actionParsers) { // If developer didn't provide title, use system provided title string title = GetString(inputJson, "title") ?? "Dismiss"; return(new AdaptiveSubmitAction() { Title = title, AdditionalProperties = new JsonObject() { { "-ms-systemActivationType", JsonValue.CreateStringValue("dismiss") } } }); }