Как вернуть JSON в C# API - PullRequest
       1

Как вернуть JSON в C# API

2 голосов
/ 02 апреля 2020

Я новичок в C#, и мне интересно, как можно было бы go о приведении строителя строк к структуре JSON? Я использую функцию SQL FOR JSON, и она возвращает JSON в несколько строк. Я складываю строки, чтобы получить строку, и таким образом приводю ее к JSON. Я получаю эту ошибку при компиляции, однако это было самое близкое решение, которое я нашел. Кажется, что C# довольно строго с типами данных

Аргумент ошибки 1: невозможно преобразовать из 'System.Text.StringBuilder' в 'System.ReadOnlySpan' WebApiSwagger

public class AlgReadingChannel
{
     /// <example>1</example>
     [Required]
     public int chanNo { get; set; }
}


public class AlgReadingInner
{
    /// <example>2020-03-12T16:41:43.017</example>
    public string Created { get; set; }
    /// <example>2020-03-12T16:41:43.017</example>
    public string Modified { get; set; }
    /// <example>24867</example>
    public int ReadingID { get; set; }
    /// <example>2323</example>
    public string Name { get; set; }
    /// <example>Starting</example>
    public string Reading { get; set; }
    /// <example></example>
    public string State { get; set; }
    /// <example>X</example>
    public string Site { get; set; }
    /// <example>Main</example>
    [Required]
    public IList<AlgReadingChannel> v { get; set; }
}

/// <summary>
/// Represents AlgReading parent class
/// </summary>
public class AlgReadingOuter
{
    /// <example>5137</example>
    [Required]
    public int AnalogID { get; set; }
    /// <example>E360EC39-7B0F-42A1-B125-2298SHDE53</example>
    [Required]
    public string SiteID { get; set; }
    /// <example>2020-03-12T09:41:43</example>
    [Required]
    public string EntryDateTime { get; set; }
    [Required]
    public IList<AlgReadingInner> t { get; set; }
}

var stringBuilder = new StringBuilder();
var docs = new List<AlgReadingOuter>();

stringBuilder.Append([{
    "AnalogID": 5137,
    "SiteID": "E360EC39-7B0F-42A1-B125-22C1F6C5DE53",
    "EntryDateTime": "2020-03-12T09:41:43",
    "t": [{
        "Created": "2020-03-12T16:41:43.017",
        "Modified": "2020-03-12T16:41:43.017",
        "ReadingID": 24867,
        "Name": "ABC",
        "Reading": "Starting",
        "State": "X",
        "Site": "Main",
        "v": [{
            "chanNo": 1
        }]
    },
    {
        "Created": "2020-03-12T16:41:43.017",
        "Modified": "2020-03-12T16:41:43.017",
        "ReadingID": 24868,
        "Name": "bar",
        "Reading": "Starting",
        "State": "X",
        "Site": "Main",
        "v": [{
            "chanNo": 2
        }]
    },
    {
        "Created": "2020-03-12T16:41:43.017",
        "Modified": "2020-03-12T16:41:43.017",
        "ReadingID": 24869,
        "Name": "foo",
        "Reading": "Starting",
        "State": "X",
        "Site": "Main",
        "v": [{
            "chanNo": 3
        }]
    },
    {
        "Created": "2020-03-12T16:41:43.017",
        "Modified": "2020-03-12T16:41:43.017",
        "ReadingID": 24870,
        "Name": "Test",
        "Reading": "Starting",
        "State": "X",
        "Site": "Aux",
        "v": [{
            "chanNo": 4
        }]
    },
    {
        "v": [{
            "chanNo": 30
        },
        {
            "chanNo": 32
        },
        {
            "chanNo": 39
        },
        {
            "chanNo": 56
        },
        {
            "chanNo": 69
        },
        {
            "chanNo": 71
        },
        {
            "chanNo": 79
        },
        {
            "chanNo": 82
        },
        {
            "chanNo": 87
        }]
    }]
}]);

var algReading = JsonSerializer.Deserialize<AlgReadingOuter>(stringBuilder);
docs.Add(algReading);

1 Ответ

2 голосов
/ 02 апреля 2020

Это потому, что StringBuilder не является строкой.

Вы должны вызвать ToString(), чтобы действительно получить то, что вы хотите.

Итак, это действительно должно быть:

algReading= JsonSerializer.Deserialize<AlgReadingOuter>(jsonResult.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...