c# - 如何在不使用 Newtonsoft 的情况下从复杂的 json 字符串中获取令牌或元素
问题描述
好吧,我需要为 Dynamics 365 创建一个插件,以从 Web 服务中获取值,这会返回一个复杂的 json 数据。
我使用 DataContractJsonSerializer 及其 ReadObject 方法将 json 转换为 c# 对象。我的问题是我需要从 json 对象中获取特定项目。例如说名字、城市、国家。我想选择特定的令牌,比如 AddressInfo、City 等。无论如何,如果不使用 Newtonsoft.Json 类,是否可以这样做。我正在使用沙盒环境,所以我不想使用它。
"value": [
{
"UserName": "russellwhyte",
"FirstName": "Russell",
"LastName": "Whyte",
"Emails": [
"Russell@example.com",
"Russell@contoso.com"
],
"AddressInfo": [
{
"Address": "187 Suffolk Ln.",
"City": {
"CountryRegion": "United States",
"Name": "Boise",
"Region": "ID"
}
}
],
"Gender": "Male",
"Concurrency": 636701022117117603
},
{
"UserName": "scottketchum",
"FirstName": "Scott",
"LastName": "Ketchum",
"Emails": [
"Scott@example.com"
],
"AddressInfo": [
{
"Address": "2817 Milton Dr.",
"City": {
"CountryRegion": "United States",
"Name": "Albuquerque",
"Region": "NM"
}
}
],
"Gender": "Male",
"Concurrency": 636701022117117603
}]
private void ConvertJsonToObject(ITracingService tracingService, object jsonData)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<PeopleInfo>));
MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms);
writer.Write(jsonData);
writer.Flush();
ms.Position = 0;
//tracingService.Trace("memory stream \n{0}", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));
//tracingService.Trace("Memory stream \n{0}", ser.ReadObject(ms));
List<PeopleInfo> pi = (List<PeopleInfo>)ser.ReadObject(ms);
foreach (PeopleInfo info in pi)
{
tracingService.Trace("Name: {0}", info.FirstName + " " + info.LastName);
}
}
[DataContract]
public class PeopleInfo
{
/*To ignore the value of this property just remove [DataMember]*/
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string Address { get; set; }
}
try
{
WebClient client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/json";
string serviceURL = "http://services.odata.org/V4/TripPinService/People";
object jsonData = client.UploadString(serviceURL,"");
ConvertJsonToObject(tracingService, jsonData);
}
解决方案
推荐阅读
- java - 字符串子字符串故意删除字符 0
- amazon-web-services - 将“cloud-provider=aws”与 kubeadm 一起使用时,kube-controller-manager 无法启动
- tkinter - 如何在 Tkinter 窗口上显示图像?
- java - 按下退出键时取消表格选择
- r - 将图像从帧数据保存到R中的文件
- neo4j - 将 csv 加载到 neo4j 的分步说明
- angular - Angular 4 - 格式化 SQL 时间
- html - 将高度和宽度调整为与 flexbox 相等
- javascript - 如何将 React-router 与 {this.props.children} 一起使用
- macos - 如何在 Mac OS X 上升级汇编程序