繁体   English   中英

解析JSON响应,其中对象以c#中的数字开头

[英]Parse JSON response where the object starts with a number in c#

我正在尝试将REST服务的响应反序列化为C#强类型类-但是,我在这篇文章中遇到了同样的问题: 我如何在键以数字开头的情况下输出此JSON值?

但是我有一个问题,你不能在C#中以数字开头一个变量名-这意味着该级别的类只是反序列化为null。

我需要知道如何进入对象并将它们反序列化为c#类。

我当前的代码如下:

public static async Task<T> MakeAPIGetRequest<T>(string uri)
    {
        Uri requestURI = new Uri(uri);
        using (HttpClient client = new HttpClient())
        {
            HttpResponseMessage responseGet = await client.GetAsync(requestURI);
            if (responseGet.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception(String.Format(
                "Server error (HTTP {0}: {1}).",
                responseGet.StatusCode,
                responseGet.Content));
            }
            else
            { 
            string response = await responseGet.Content.ReadAsStringAsync();
                T objects = (JsonConvert.DeserializeObject<T>(response));

                return objects;
            }
        }
    }

编辑:我不能更改服务推回数据的方式

正确的处理方法是在目标类上使用JsonProperty标记来定义要侦听的Json属性,如下所示(从https://stackoverflow.com/questions/24218536/deserialize-json-that-引用) 有一些属性名称以数字开头

public class MyClass
{
    [JsonProperty(PropertyName = "24hhigh")]
    public string Highest { get; set; }
    ...

感谢@HebeleHododo的评论答案

尽管在这种情况下没有直接的方法来构造强类型的C#对象,但是您仍然可以手动解析json字符串并提取值-

var json = "{'1':{'name':'test','age':'test'}}";
var t = JObject.Parse(json)["1"];
Console.WriteLine(t["name"]); //test
Console.WriteLine(t["age"]);  //test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM