【问题标题】:C# serialize json to classC# 将 json 序列化为类
【发布时间】:2018-07-17 06:51:58
【问题描述】:

这是我的json:

"{\"sctoken\":\"a50395d5-571983f3-b394-4c6f-a26a-f95ae125fad6\",\"tms\":[{\"name\":\"ELTE MapCenterCache\",\"url\":\"http://cache2.smok.net.pl/cache_2015/element?s=%zoom%&x=%x%&y=%y%\"},{\"name\":\"OSM Mapnik\",\"url\":\"http://tile.openstreetmap.org/%zoom%/%x%/%y%.png\"},{\"name\":\"OSMElteMapa\",\"url\":\"http://osm.smok.net.pl/osm_tiles/%zoom%/%x%/%y%.png\"}],\"user_descr\":\"Pawel Okarmus\"}"

这是我如何将 json 转换为类:

LoginResult loginResult = JsonConvert.DeserializeObject<LoginResult>(result.ToString());


class LoginResult
{
    string sctoken { set; get; }
    List<Maps> tms { set; get; }
}

class Maps
{
    public string name { get; set; }
    public string url { get; set; }
}

我的对象 LoginResult 是空的

【问题讨论】:

    标签: c# json httpclient


    【解决方案1】:

    试试这个

    LoginResult loginResult = JsonConvert.DeserializeObject<RootObject>(result.ToString());
        public class Tm
        {
            public string name { get; set; }
            public string url { get; set; }
        }
    
        public class RootObject
        {
            public string sctoken { get; set; }
            public List<Tm> tms { get; set; }
            public string user_descr { get; set; }
        }
    

    【讨论】:

    • JsonConvert.DeserializeObject&lt;RootObject&gt;() 不会生成 LoginResult。此外,一个好的答案可以解释您所做的更改以及更改的原因。
    • 关键在于Tm 的类和属性上的public 修饰符(它无缘无故地从Maps 重命名,我猜是因为你生成了它)。
    • 是的,你是对的。首先,我将 JSON 字符串转换为 JSON 对象,然后将该 JSON 对象字符串化,并从该字符串化 JSON 字符串生成类。 @PeterB
    • 你能告诉我为什么我不能这样做吗:loginResult = Test1(LogIncs); ?
    【解决方案2】:

    如果你将属性和类都设为public,它应该可以工作,因此反序列化器可以找到并访问它们:

    public class LoginResult
    {
        public string sctoken { set; get; }
        public List<Maps> tms { set; get; }
    }
    
    public class Maps
    {
        public string name { get; set; }
        public string url { get; set; }
    }
    

    您还缺少元素 user_descr 但这不是必需的(您仍然可以添加它,或者如果您不需要它则省略它)。

    【讨论】:

    • 你能告诉我为什么我不能这样做吗:loginResult = Test1(LogIncs); ?
    【解决方案3】:

    你在LoginResult 类中缺少Public,只需输入公共访问修饰符,它就会开始工作(像这样):

      class LoginResult
        {
            public string sctoken { set; get; }
            public List<Maps> tms { set; get; }
        }
    

    【讨论】:

    • 你能告诉我为什么我不能这样做吗:loginResult = Test1(LogIncs); ?
    • 你能解释一下你想在这里做什么吗?
    • 当我finidh这个metgod我有parametr sctoken我想做另一个我使用这个ectoken的功能
    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多