为了账号安全,请及时绑定邮箱和手机立即绑定

JSON 不反序列化某些值

JSON 不反序列化某些值

C#
噜噜哒 2021-12-25 16:54:57
我有一个基类(用于User类的基类):public abstract class UserB2C{…    public List<SignInName> SignInNames { get; set; }…}public class SignInName{    string Type { get; set; }    string Value { get; set; }}还有一些 JSON,其中包括:\"signInNames\":[{\"type\":\"emailAddress\",\"value\":\"user@yahoo.co.uk\"}],传递给:JsonConvert.DeserializeObject<User>(json);但是创建(反序列化)的对象具有:    "signInNames": [        {}    ],为什么该字段没有被填充的任何想法?没有产生错误。所有其他(简单)值都可以正常填充。我试着改变的情况下Type,并Value以JSON字符串匹配,并且还试图明确创建List<SignInName>时创建的对象,但无济于事。
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

SignInName类的属性应该声明为public,以便用值反序列化。


public class SignInName

{

    public string Type { get; set; }

    public string Value { get; set; }

}

更新


这是一个最小、完整且可验证的示例:


using Newtonsoft.Json;

using System.Collections.Generic;


class Program

{

    static void Main(string[] args)

    {

        var json = 

        "{\"signInNames\":[{\"type\":\"emailAddress\",\"value\":\"user@example.com\"}]}";

        var user = JsonConvert.DeserializeObject<User>(json);

        System.Console.WriteLine(JsonConvert.SerializeObject(user)); 

    }

}


public abstract class UserB2C

{

    public List<SignInName> SignInNames { get; set; }

}


public class User : UserB2C {  }


public class SignInName

{

    string Type { get; set; }

    string Value { get; set; }

}

输出是 {"SignInNames":[{}]}


如果我们创建SignInName类属性public,输出将是:


{"SignInNames":[{"Type":"emailAddress","Value":"user@example.com"}]}


查看完整回答
反对 回复 2021-12-25
  • 1 回答
  • 0 关注
  • 403 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号