首页 > 解决方案 > 如何在不使用 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);


                }

标签: c#jsonweb-servicespluginsdynamics-365

解决方案


推荐阅读