Невозможно отобразить предмет на карте героя карусели - PullRequest
3 голосов
/ 16 января 2020

В настоящее время я хочу преобразовать JSON в Карусель HeroCard,

При отладке,

Отображается ошибка

System.ArgumentException: не может конвертировать массив в строку. на Newtonsoft. Json .Linq.JToken.op_Explicit (значение JToken)

Здесь с моим JSON

{
    "@odata.context": "https://Cognitivesearch.search.windows.net/indexes('testindex1')/$metadata#docs(*)",
    "value": [     
        {
            "@search.score": 0.03393994,
            "metadata_storage_name": "DRSK.xlsm",
            "metadata_storage_path": "aHR0cHM6Ly9rcG1nc2VhcmNoc3RvcmFnZS5ibG9iLmNvcmUud2luZG93cy5uZXQvYmFzaWNkZW1vL0RSU0sueGxzbQ2",
            "text": [
                "Excel Template Excel Template Unique tickers: 2 Display Rows: Valid(8) .Invalid(0) o All(8) Company Name Ticker Country Sector Currency Announced Date (mm/dd/yy) 1. V R&R ICE CREAM RRR1 US Food & Bevera |GBP 2/14/12 @ 2. J R&R ICE CREAM RRR1 US Food & Bevera GBP 2/14/11 0 3. V RAR ICE CREAM RRR1 US Food & Bevera GBF 2/14/10 @ 4. R&R ICE CREAM RRR1 US Food & Bevera GBP 2/14/09 @ 5. V R&R ICE CREAM RRR1 US Food & Bevera GBP 2/14/08 @ 6. / R&R ICE CREAM RRR1 US Food & Bevera |GBP 2/14/07 0 3. V DUKE FIRST BA DUKETST US Banks USD 1/31/14 @ B. / DUKE FIRST BA DUKETST US Banks USD 10/22/13 @ 2 Export to Excel D Upload Cancel",
                "Excel Template Excel Template Step 1: 10) Download Template Step 2: Fill Data in Template Option 1 - Enter data manually or Option 2 - Cut and paste from your Excel workshee Do not change format or order of the columns. Step 3: Highlight data, drag, and drop here To highlight your data in Excel, select headers and data in Excel. Next, move your mouse pointer to the border of the selected area till the mouse pointer changes to a plus (+) with arrows. Left-click and drag the selection into this popup. Close"
            ]
        },

        {
            "@search.score": 0.0032757183,
            "metadata_storage_name": "DRSK non financial private companies white paper.pdf",
            "metadata_storage_path": "aHR0cHM6Ly9rcG1nc2VhcmNoc3RvcmFnZS5ibG9iLmNvcmUud2luZG93cy5uZXQvYmFzaWNkZW1vL0RSU0slMjBub24lMjBmaW5hbmNpYWwlMjBwcml2YXRlJTIwY29tcGFuaWVzJTIwd2hpdGUlMjBwYXBlci5wZGY1",
            "text": [
                "Bloomberg",
                "Technical Default Grace Period Default Resolution Bankruptcy Failure to Pay Coupon Positive Resolution: Firm Attempts to Firm Survives Violation of Fix Situation Debt Covenants Negative Resolution: Default Bankruptcy Figure 1 - Time line for default",    
                "1-Yr Default Prob 17.2533 35 32.2807 30 25 20 15 10 Jun Sep Dec Mar Jun Sep Dec Mar Jun Sep 2007 2008 2009 Copyright 2016 Bloomberg Finance L.P. 12-Jan-2016 14:08:33",

            ]
        }
    ]
}

И здесь с моим исходным кодом

   try
        {
            var content = response.Content;
            JObject jObj = JObject.Parse(jsoncontent);
            JArray jarr = (JArray)jObj["value"];

            var attachments = new List<Attachment>();
            foreach (JToken item in jarr)
            {
                var filename = (string)item.SelectToken("metadata_storage_name");
                var filepath = (string)item.SelectToken("metadata_storage_path");
                var desc = (string)item.SelectToken("text");

                var heroCard = new HeroCard(
                    title: filename,
                    subtitle: desc
                    ).ToAttachment();
                attachments.Add(heroCard);

            }

            var reply = MessageFactory.Carousel(attachments);
            await turnContext.SendActivityAsync(reply);
        }catch(Exception ex)
        {
            await turnContext.SendActivityAsync(ex.ToString());
        }

и

Я хочу отображать "metadata_storage_name" и "text" в HeroCard.

Спасибо в Advanced.

1 Ответ

1 голос
/ 16 января 2020

Проблема, с которой вы столкнулись, связана с разделом «текст» - в вашем JSON это не одиночное значение, а массив строковых значений. В результате вам нужно подумать, как на самом деле вы хотите с этим справиться.

Вот конкретная строка, которая вызывает проблему:

var desc = (string)item.SelectToken("text");

Чтобы на самом деле получить эти строки значения, вы можете импортировать их как строковый массив, например так:

string[] descriptions = item.SelectToken("text").ToObject<string[]>();

(я не проверяю нулевые значения в строке выше, для «текста», вы должны вероятно, сделайте это).

Когда у вас есть этот массив, вам нужно решить, что с ним делать. Например, вы можете захотеть объединить их все, разделив их символом «;», например, «test 1» и «test 2» будут выглядеть как «test 1; test 2» в качестве окончательного описания. Примерно так это будет выглядеть так:

string[] descriptions = item.SelectToken("text").ToObject<string[]>();
var desc = string.Join("; ", descriptions); 

, который даст вам объединенное «описание» в переменную «des c», и вы сможете делать с ней все, что захотите.

надеюсь, что поможет

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