C# 使用C进行JSON数据反序列化和序列化时处理.png图像#
我正在尝试从WikipediaAPI反序列化json数据。首先,我需要反序列化一些特定数据,如标题、摘录、图像、坐标等。反序列化后,我需要再次序列化这些数据以获得结果输出。但我遇到的问题是维基百科API有一些png格式的图像。但在我的代码中,我只能将jpg图像转换为哈希格式。所以,当.png文件出现时,它将进入异常处理,并且没有任何内容显示为输出。我想知道我如何写我的代码,可以转换jpg和png图像。我的代码如下-C# 使用C进行JSON数据反序列化和序列化时处理.png图像#,c#,json,serialization,png,jpeg,C#,Json,Serialization,Png,Jpeg,我正在尝试从WikipediaAPI反序列化json数据。首先,我需要反序列化一些特定数据,如标题、摘录、图像、坐标等。反序列化后,我需要再次序列化这些数据以获得结果输出。但我遇到的问题是维基百科API有一些png格式的图像。但在我的代码中,我只能将jpg图像转换为哈希格式。所以,当.png文件出现时,它将进入异常处理,并且没有任何内容显示为输出。我想知道我如何写我的代码,可以转换jpg和png图像。我的代码如下- using (WebClient client = new WebClient(
using (WebClient client = new WebClient())
{
try
{
var response = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&redirects=1&generator=geosearch&prop=extracts|coordinates|pageimages&ggslimit=20&ggsradius=1000&ggscoord=48.47|9.11&&formatversion=2&exintro=1&explaintext=1&exlimit=20&coprop=type|dim|globe&colimit=20&piprop=thumbnail&pithumbsize=400&pilimit=20");
var json = JsonConvert.DeserializeObject<RootObject>(response);
List<Poi> poi = new List<Poi>();
foreach (var page in json.query.pages) //foreach statement cannot operate on variables of type 'List_Places_Geo.RootObject' because 'List_Places_Geo.RootObject' does not contain a public definition for 'GetEnumerator'
{
Poi obj = new Poi();
obj.Title = page.title;//what to write in this line to get the title;
obj.Description =page.extract ;
var Image = new PoiImage();
var ImgfirstKey = page.thumbnail.source;
Image.ImageID = string.Format("{0:X}.jpg", ImgfirstKey.GetHashCode());
obj.Images = new List<PoiImage> {Image};
obj.Lat = page.coordinates.First().lat;
obj.Lon = page.coordinates.First().lon;
poi.Add(obj);
}
string result = JsonConvert.SerializeObject(poi, Formatting.Indented);
Console.WriteLine(result);
}
catch(Exception)
{
Console.WriteLine("Error");
}
}
试试这个代码。可能对你有帮助。直接从路径获取图像(您肯定会获得每个
图像的路径
),并将其更改为Base64
encodedString
,然后将其传递到JSONObject
在另一端,使用Base64
类解码器对其进行解码,并将其作为文件写入。
这里有一个code
到encode
直接从Path
using (Image image = Image.FromFile(Path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
using (Image image = Image.FromFile(Path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}