【问题标题】:Create a JSON from C# WCF Classes从 C# WCF 类创建 JSON
【发布时间】:2019-11-13 02:01:11
【问题描述】:

我构建了以下 c# 类:

using System.Collections.Generic;
using System.Runtime.Serialization;

namespace Broca.ConversationalServices.Api.Operations.Response
{
    [DataContract]
    public class IntentResponse
    {
        public IntentResponse()
        {
            FulfillmentMessages = new List<FulfillmentMessage>();
        }

        [DataMember(Name = "responseId", Order = 1)]
        public string ResponseId { get; set; }

        [DataMember(Name = "fulfillmentText", Order = 2)]
        public string FulfillmentText { get; set; }

        [DataMember(Name = "fulfillmentMessages", Order = 3)]
        public List<FulfillmentMessage> FulfillmentMessages { get; set; }
    }

    [DataContract]
    public class FulfillmentMessage
    {
        public FulfillmentMessage()
        {
            SimpleResponsesRoot = new SimpleResponses();
            basicCard = new BasicCard();
        }

        [DataMember(Name = "platform", Order = 4)]
        public string Platform { get; set; }

        [DataMember(Name = "simpleResponses", Order = 5)]
        public SimpleResponses SimpleResponsesRoot { get; set; }

        public BasicCard basicCard { get; set; }
    }

    [DataContract]
    public class SimpleResponses
    {
        public SimpleResponses()
        {
            ListOfSimpleResponses = new List<SimpleResponse>();
        }

        [DataMember(Name = "simpleResponses", Order = 6)]
        public List<SimpleResponse> ListOfSimpleResponses { get; set; }
    }

    [DataContract]
    public class SimpleResponse
    {
        [DataMember(Name = "textToSpeech", Order = 7)]
        public string TextToSpeech { get; set; }
    }

    public class Image
    {
        public string imageUri { get; set; }
        public string accessibilityText { get; set; }
    }

    public class OpenUriAction
    {
        public string uri { get; set; }
    }

    public class Button
    {
        public Button()
        {
            openUriAction = new OpenUriAction();
        }
        public string title { get; set; }
        public OpenUriAction openUriAction { get; set; }
    }

    [DataContract]
    public class BasicCard
    {
        public BasicCard()
        {
            buttons = new List<Button>();
            image = new Image();
        }

        public string title { get; set; }
        public string subtitle { get; set; }
        public string formattedText { get; set; }
        public Image image { get; set; }
        public List<Button> buttons { get; set; }
    }
}

我想从中创建以下 JSON:

{
  "responseId": "e75dd83e-b174-4896-b1f6-2f348b2621b2-b81332aa",
    "fulfillmentText": "text",
    "fulfillmentMessages": [
      {
        "platform": "ACTIONS_ON_GOOGLE",
        "simpleResponses": {
          "simpleResponses": [
            {
              "textToSpeech": "text"
            }
          ]
        }
      },
      {
        "platform": "ACTIONS_ON_GOOGLE",
        "basicCard": {
          "title": "text",
          "subtitle": "text",
          "formattedText": "text",
          "image": {
            "imageUri": "https://text.jpg",
            "accessibilityText": "text"
          },
          "buttons": [
            {
              "title": "string",
              "openUriAction": {
                "uri": "https://xxxx.xxx.com"
              }
            }
          ]
        }
      },    
    ],
  }

当我这样做时

 IntentResponse intentResponse = new IntentResponse();
 FulfillmentMessage fulfillmentMessage = new FulfillmentMessage();

intentResponse.ResponseId = intentRequest.responseId;
intentResponse.FulfillmentText = "Data";

var simpleResponse = new SimpleResponse();
simpleResponse.TextToSpeech = "This is a simple response";

fulfillmentMessage.SimpleResponsesRoot.ListOfSimpleResponses.Add(simpleResponse);

JSON 转换为相应格式,但我无法将 BasicCard 添加为另一个元素。

我添加了这段代码

var basicCard = new BasicCard();
basicCard.title = "Title";
basicCard.subtitle = "sub title";
basicCard.formattedText = "This is the card text";

var button = new Button();
button.title = "Visitanos";
button.openUriAction.uri = @"http://www.ssss.com";

basicCard.buttons.Add(button);
basicCard.image.accessibilityText = "accesibility text";
basicCard.image.imageUri = "xx.png";

fulfillmentMessage.basicCard = basicCard;

intentResponse.FulfillmentMessages.Add(fulfillmentMessage);

但是当我添加fulfillmentMessage 时,我总是收到SimpleResponse 而不是基本卡。我该怎么办?

我们总是感谢您的帮助。

【问题讨论】:

    标签: c# .net list generics dialogflow-es


    【解决方案1】:

    您的代码不会生成您发布的 JSON。具体来说,我认为主要问题是重用您的 fulfillmentMessage 对象。单个消息可能仅包含单个响应类型。因此,为了同时显示一个简单的响应(需要作为第一条消息1)和一张卡片,您需要在一条新消息中添加卡片(而不是将两者放在同一条消息中) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2021-12-30
      • 2011-08-12
      • 2015-11-05
      • 1970-01-01
      相关资源
      最近更新 更多