Проблема генерации JSON с использованием Newtonsoft.Json - PullRequest
0 голосов
/ 19 октября 2019

Я использую Newtonsoft.Json для генерации следующего результата Json. Я сгенерировал большую часть выходных данных, кроме «Атрибутов», и не смог понять, как это сделать. Результат запрашивается клиентом и не может быть изменен.

Ожидаемый результат.

{
    "TransactionId": "3S76CjmZ3S7",
    "Environment": "sandbox",
    "ApiVersion": "1.0",
    "Error": "",
    "Warning": "",
    "Data_response": {
        "Data_response_data": [{
            "Brand": "Genuine",
            "Number": "E11106660",
            "Description": "DUPLICATE BASE",
            "Images": [{
                    "FileName": "EA10650_STO_FRO_ALL.PNG"
                },
                {
                    "FileName": "EA10660_STO_FRO_ALL.png"
                }
            ],
            "360Images": [{
                "FileName": "EA10660_STO_ALL.zip"
            }],
            "OriginalStrings": "E11106660",
            "Attributes": {
                "Color": "Blue",
                "Weight": "120lbs",
                "Brand": "TRP"
            }
        }]
    }
}

Я использую следующий код для создания JSON.

JObject jObject = JObject.FromObject(new
{
    TransactionId = partRequest.TransactionId,
    Environment = partRequest.Environment,
    ApiVersion = partRequest.ApiVersion,
    Error = "",
    Warning = "",
    Data_response = new
    {
        Data_response_data =
             from p in Wrapper
             orderby p.CompressedNumber
             select new
             {
                 Brand = p.Brand,
                 Number = p.CompressedNumber,
                 Description = p.Description,
                 Images =
                     from d in p.DigitalAssets
                     orderby d.FileName
                     select new
                     {
                         FileName = d.FileName
                     },
                 360Images =
                     from d in p.DigitalAssets360
                     orderby d.FileName
                     select new
                     {
                         FileName = d.FileName
                     },
                 OriginalStrings = p.CompressedNumber,
                 Attributes = ???
                 // I tried this but its throws an exception.
                 // from d in p.Attributes
                 // orderby d.Name
                 // select new
                 // {
                 //  d.Name = d.Value
                 //}
             }
    }
});

Класс атрибута

public class Attribute
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 20 октября 2019

Атрибуты необходимо преобразовать в словарь.

Пример

class Attribute
{
    public string Name { get; set; }
    public string Value { get ; set; }
}

(...)

var attributes = new List<Attribute>
{
    new Attribute() { Name="Color", Value="Blue" },
    new Attribute() { Name= "Weight", Value ="54.4kg" }
};

var d = attributes.ToDictionary(a=> a.Name, a => a.Value);

var json = System.Text.Json.JsonSerializer.Serialize(new { Attributes = d});

Console.WriteLine(json);

Вывод

{"Attributes":{"Color":"Blue","Weight":"54.4kg"}}

В вашем случае это может быть что-то вродеследующий.

Attributes = (from d in p.Attributes
                  orderby d.Name
                 select d).ToDictionary(a=> a.Name, a => a.Value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...