- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 JSON formate 中得到了很大的响应,我只需要 2 个字符串,这是我的 JSON 文件,我在其中进行了缩减以便更好地阅读
{
"cdn_url": "https://f.vimeocdn.com",
"vimeo_api_url": "api.vimeo.com",
"request": {
"files": {
"progressive": [
{
"profile": 164,
"width": 622,
"mime": "video/mp4",
"fps": 25,
"url": "1047326445.mp4",
"cdn": "akamai_interconnect",
"quality": "360p",
"id": 1047326445,
"origin": "gcs",
"height": 360
},
{
"profile": 165,
"width": 932,
"mime": "video/mp4",
"fps": 25,
"url": "1047326437.mp4",
"cdn": "akamai_interconnect",
"quality": "540p",
"id": 1047326437,
"origin": "gcs",
"height": 540
}
]
}
},
"video": {
"version": {
"current": null,
"available": null
},
"height": 540,
"duration": 401,
"thumbs": {
"640": "712851375_640.jpg",
"960": "712851375_960.jpg",
"base": "712851375"
},
"id": 279550927,
"default_to_hd": 0,
"url": null,
"privacy": "disable",
"unlisted_hash": null
}
}
为了更好地阅读,我从中删除了很多对象。我想要“url”:“1047326445.mp4”,来自视频对象中“640”变量的渐进数组和字符串。
protected void btnclick_Click(object sender, EventArgs e)
{
string normalURL = "279550927";
string urlJSONcall = "https://player.vimeo.com/video/" + normalURL + "/config";
string json = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlJSONcall);
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
var responseStream = response.GetResponseStream();
if ((responseStream != null) && responseStream.CanRead)
{
using (var reader = new System.IO.StreamReader(responseStream))
{
json = reader.ReadToEnd();
LBresponse.Text = json;
}
}
}
finally
{
if (response != null)
{
response.Close();
}
}
var data = (JObject)JsonConvert.DeserializeObject(json);
}
}
由于嵌套对象,我很难解决它。
我不知道下一步该做什么,
最佳答案
这对我有用:
protected void btnclick_Click(object sender, EventArgs e)
{
string normalURL = "279550927";
string urlJSONcall = "https://player.vimeo.com/video/" + normalURL + "/config";
using (var w = new WebClient())
{
var json_data = string.Empty;
// attempt to download JSON data as a string
try
{
json_data = w.DownloadString(urlJSONcall).Replace("\"640\"", "\"_640\"");;
}
catch (Exception) { }
// if string with JSON data is not empty, deserialize it to class and return its instance
var mainObject = !string.IsNullOrEmpty(json_data) ? Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json_data) : null;
string cdn_url = mainObject?.cdn_url;
string vimeo_api_url = mainObject?.vimeo_api_url;
string _640 = mainObject?.video?.thumbs?._640;
var Prgs = mainObject?.request?.files?.progressive;
foreach (var progressive in Prgs)
{
string URL = progressive.url;
}
}
}
但是如果你关心返回的类型,你可以使用这个解决方案:第 1 步:
protected void btnclick_Click(object sender, EventArgs e)
{
string normalURL = "279550927";
string urlJSONcall = "https://player.vimeo.com/video/" + normalURL + "/config";
using (var w = new WebClient())
{
var json_data = string.Empty;
// attempt to download JSON data as a string
try
{
json_data = w.DownloadString(urlJSONcall).Replace("\"640\"", "\"_640\"");;
}
catch (Exception) { }
// if string with JSON data is not empty, deserialize it to class and return its instance
MainObject mainObject = !string.IsNullOrEmpty(json_data) ? Newtonsoft.Json.JsonConvert.DeserializeObject<MainObject>(json_data) : null;
string cdn_url = mainObject?.cdn_url;
string vimeo_api_url = mainObject?.vimeo_api_url;
string _640 = mainObject?.video?.thumbs?._640;
var Prgs = mainObject?.request?.files?.progressive;
foreach (Progressive progressive in Prgs)
{
string URL = progressive.url;
}
}
}
第 2 步:添加这些类以浏览属性
public class MainObject
{
public string cdn_url { get; set; }
public string vimeo_api_url { get; set; }
public Request request { get; set; }
public Video video { get; set; }
}
public class Request
{
public Files files { get; set; }
}
public class Files
{
public Progressive[] progressive { get; set; }
}
public class Progressive
{
public string url { get; set; }
}
public class Video
{
public Thumbs thumbs { get; set; }
}
public class Thumbs
{
public string _640 { get; set; }
}
关于c# - 部分反序列化 JSON 以仅获取必需的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51535649/
我目前正在对一个 mmorpg 的二进制网络协议(protocol)进行逆向工程。我正在用 java 实现该协议(protocol)。 对于每个数据包类型,我将创建一个表示二进制数据的类。 例如,聊天
我正在尝试围绕现有类编写半透明包装器,我希望它能够模仿其他类的序列化。 例如,给定以下类: class Foo { [JsonConverter(CustomConverter)] s
是否有使用 Jackson 序列化和反序列化枚举集的简单方法? private enum Type { YES, NO } @JacksonXmlProperty(localName = "t
我很想知道当我们反序列化一个对象时会发生什么。 例如,如果我的类对象由许多其他对象组成,对象创建过程如何在反序列化过程中发生 最佳答案 对象是用默认的初始化字段创建的,然后用从串行流中获取的属性值填充
我正在尝试序列化和反序列化(使用 QDataStream 但这与这里无关)一个 enum class变量: enum class Type : char { Trivial, Comp
我不确定这到底有什么问题...它不会为我编译,我将它从 c 翻译成 C++(或尝试)...是的,我是初学者。谢谢! #include #include using namespace std; i
我遇到的问题与此处描述的问题非常相似:Combining type and field serializers case class(id: Option[UUID], otherValue:Stri
我们知道base中的apply()可以对数组的边距应用一个函数,边距应该是行或列。我想将边距扩大到“对角线” 和“反对角线”。结构看起来像 diagApply <- function(x, FUN,
我找到了 JSON serialization and deserialization to objects in Flutter 的例子但是如何使用像这样的人员列表来做到这一点: [ {
我有一个相当大的terms聚合结果,这些结果被加载到下拉列表中以提供filter功能。 可以说,我的下拉列表中有4000多种动物。我的另一个下拉列表有4种动物颜色。 例, animal --> ["d
我需要将 C# (.NET Framework 4.5.2) 中的一个类与 XML 序列化(反序列化),该类具有 string 的字典属性。键和 string[]数组值。我正在使用 Serializa
[已解决]应用给定的解决方案,效果很好! 程序的目的:在用户打开和关闭程序时保存/重新加载以前的数据。 我曾经用一个对象(obj)成功(反)序列化,现在我有两个不同类的不同对象。 我试图通过查看其他帖
问题 假设我有一个代表某事或其他的枚举: public enum ResultState { Found, Deleted, NotFound } 在我的序列化 json 中,
是否有取消 JSON 字符串的功能?我猜它不会内置到 JQuery 中,但它可以通过编写一个操纵字符串的脚本来实现吗?我在下面遇到了这个问题。 我正在使用 NYTimes API,但它不支持 JSON
对于这个问题,假设当对象完全写入流并成功读出时,或者当对象部分写入流并且读回对象时发生异常时,序列化/反序列化是原子的。假设写操作可能无法成功完成,例如因为停电了。 在Serializable的描述中
有谁知道时序检查是否仍在检测虚拟环境?我尝试使用 rdtsc 指令来获取 cpu 周期并比较真实 linux 机器和在 virtualbox 上运行的 linux 之间的结果。但结果似乎不稳定。有时,
我正在对一个(外部给定的)XML 文件进行操作,该文件具有以下形式的元素 10 20 30 40 50 60 70 80 我知道如何将属性作为属性处理(通过使用 [XmlAttri
我有一个通用的序列化器和反序列化器,用于通过网络连接发送的消息: public static async Task SerializeObject(Object obj) {
我正在考虑将当前基于 WCF 的应用程序迁移到 protobuf-net.Grpc。这似乎是可行的,但是我无法在不包含所有具有 [ProtoInclude] 属性的派生类的情况下使(DTO 类)基类的
我正在尝试将一些数据保存到文件中,但文件保存到的目录不正确。 using (StreamWriter sw = new StreamWriter(dir + "\\temp" + x + ".txt"
我是一名优秀的程序员,十分优秀!