Примечание. Этот вопрос имеет продолжение здесь:
Копировать выбранные строки флажков из DGV в DGV2, включая столбец изображения
[ 1146] Вам необходимо загрузить изображения после десериализации JSON
в объект вашего класса. Вы можете и добавить новое открытое свойство Type Bitmap во внутренний класс Result
, который будет использоваться для представления изображения, на которое ссылается URI, найденный в JSON.
Чтобы получить Изображения, вам нужен метод, который берет URI ресурса и загружает его с удаленного компьютера. Я добавил открытый метод в класс Products
, который ссылается на все объекты, содержащие ссылку на URI:
после того, как JSON
был успешно проанализирован, [ 1110] Свойство будет ссылаться на все классы Result
. Каждый класс Result
будет ссылаться на битовый URI в свойстве ProductImage
.
Используя класс WebClient
, мы можем использовать эти ссылки для загрузки изображений и добавления их в свойство типа Bitmap.
Нам также нужно указать парсеру JSON
игнорировать это свойство, так как оно не является частью объекта JSON
.
Это можно сделать, добавив атрибут
к свойству.
Переименуйте RootObject
(с именем JSON
в определении вашего класса) в Root
:
Кроме того, все классы, которые вы здесь показываете, добавляются в родительский класс с именем [ 1165]
blockquote>ProductsQuery
, используется в качестве контейнера для всех объектов класса.Public Class Root Public Property uk As Uk End Class
Десериализовать JSON с помощью
JsonConvert.DeserializeObject
:Dim JSONObject As String = File.ReadAllText("[Source Txt]") Dim JsonPost As ProductsQuery.Root = JsonConvert.DeserializeObject(Of ProductsQuery.Root)(JSONObject)
Используйте недавно добавленный публичный метод для загрузки изображений:
JsonPost.uk.ghs.Products.LoadImages()
Подготовьте DataGridViewImageColumn , который покажет изображения:
Редактировать : также вставьтеDataGridViewCheckBoxColumn
.Dim DGVCheckBoxCol As DataGridViewCheckBoxColumn = New DataGridViewCheckBoxColumn(False) With { .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCellsExceptHeader, .DisplayIndex = 0, .HeaderText = "", .Name = "Select" } Dim DGVImageCol As DataGridViewImageColumn = New DataGridViewImageColumn(False) With { .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCellsExceptHeader, .DataPropertyName = "Image", .DisplayIndex = 1, .FillWeight = 1, .HeaderText = "Image", .ImageLayout = DataGridViewImageCellLayout.Normal, .Name = "Image", .ValuesAreIcons = False }
Затем установите DataGridView
DataSource
и скройте столбец, содержащий URI-код изображения, который здесь не очень полезен. Кроме того, вызовите метод AutoResizeRows , чтобы установить размер строк для лучшего представления изображения:DataGridView1.DataSource = Nothing DataGridView1.Columns.Clear() DataGridView1.Columns.Insert(0, DGVCheckBoxCol) DataGridView1.Columns.Insert(1, DGVImageCol) DataGridView1.DataSource = JsonPost.uk.ghs.Products.Results DataGridView1.Columns(2).Visible = False DataGridView1.AutoResizeRows()
Результат :
[1156 ]
Модифицированные классы :
Примечание :
description
свойство представляет собой массив строк, которые DGV отказывается показывать как есть. Я назвал егоRawDescription
и добавил новое свойство (Description
) типа String - с атрибутом- в
Result
класс, который будет содержать сплющенную строку.Imports System.IO Imports System.Net Imports Newtonsoft.Json Public Class ProductsQuery Public Class Root Public Property uk As Uk End Class Public Class Uk Public Property ghs As Ghs End Class Public Class Ghs Public Property products As Products End Class Public Class Products Public Property input_query As String Public Property output_query As String Public Property filters As Filters Public Property queryPhase As String Public Property totals As Totals Public Property config As String
Public Property Results As Result() Public Property suggestions As Object() Public Sub LoadImages() Using client As WebClient = New WebClient() For Each result As Result In Results Dim bitmapBytes = client.DownloadData(result.ProductImage) Using ms As MemoryStream = New MemoryStream(bitmapBytes) ms.Position = 0 result.Image = CType(Image.FromStream(ms).Clone(), Bitmap) End Using result.ProductDescription = result.RawDescription(0) Next End Using End Sub End Class Public Class Filters End Class Public Class Totals Public Property all As Integer Public Property NewProducts As Integer Public Property offer As Integer End Class Public Class Result Public Property Image As Bitmap Public Property ProductImage As String Public Property SuperDepartment As String Public Property tpnb As Integer Public Property ContentsMeasureType As String Public Property Name As String Public Property UnitOfSale As Integer Public Property Description As String Public Property RawDescription As String() Public Property AverageSellingUnitWeight As Double Public Property UnitQuantity As String Public Property id As Integer Public Property ContentsQuantity As Double Public Property Department As String Public Property Price As Double Public Property Unitprice As Double End Class End Class
Рецепты SCons в Wiki являются хорошим местом для запуска. Кроме того, смотрите на другие проекты, которые используют SCons, например, систему сборки Пыла. Если это не сокращает его, существует несколько расширений третьего лица SCons, на которые можно хотеть смотреть:
Насколько я знаю нет никаких лучших практик SCons, которые были согласованы. Сообщество SCons, кажется, одобряет адаптируемость по "канонизации". Не трудно разработать достойную находящуюся в SCons систему сборки с нуля, все же. (После того как Вы поняли, как VariantDir работает, по крайней мере.)
Можно интересоваться Инструментарием Конструкции программного обеспечения Google, который был сделан открытым исходным кодом в феврале 2009. Это добавляет новые опции сверху SCons, такие как улучшенное поколение файла проекта Visual Studio, функции модульного теста и распределенные сборки с distcc или incredibuild.
При использовании Eclipse для разработки C++, можно хотеть проверить этот плагин разработчика SCons (http://nic-nac-project.org/~lothar/eclipse/update/SConsBuilderPlugin.html)