【问题标题】:Convert c# Object to JSON将 c# 对象转换为 JSON
【发布时间】:2018-02-22 13:30:44
【问题描述】:

我需要将 Json 发送到网络服务。我正在尝试:

var user = new
{
    email = "user@domain.com",
    password = "user1234"
};

var json = JsonConvert.SerializeObject(user);

这个序列化的结果是:

{"email":"user@domain.com","password":"user1234"}

但我需要在 JSON 中传递用户:

像这样:

{ "user": { "email": "user@domain.com", "password": "user1234" } }

我该怎么做?

【问题讨论】:

  • var toBeJsonified = new { user = user }
  • 注意点:这看起来像是在传递明文密码。那将是一件非常糟糕的事情。确保对它们进行哈希处理,尤其是在存储到磁盘之前。
  • 如果您知道所需的输出 json 格式,但不知道您的类结构需要如何匹配您的 JSON。您可以使用一个非常方便的 Visual Studio 函数Have a look here。如果您不使用 Visual Studio,则可以使用 this 站点。
  • 现在解决了吗?

标签: c# json rest serialization


【解决方案1】:

您需要将您的对象包装在具有user 属性的对象中:

var user = new
{
    user = new
    {
        email = "user@domain.com",
        password = "user1234"
    }
};

【讨论】:

    【解决方案2】:

    要实现这一点,您需要创建如下的类:

    public class User
    {
        public string email { get; set; }
        public string password { get; set; }
    }
    
    public class Root
    {
        public User user { get; set; }
    }
    

    创建Root类的对象:

    User userInfo = new User();
    userInfo.email = "user@domain.com";
    userInfo.password = "user1234";
    
    Root userdata = new Root();
    userdata.user  = userInfo;
    

    将数据序列化如下:

    var json = JsonConvert.SerializeObject(userdata);
    

    【讨论】:

    • 首先,您不需要创建这些类。二、不使用User类有什么意义(保持userInfo的匿名类型)?
    • 小心,在您的编辑中,您将 userInfo 替换为 userdata 但这变得不一致(您的 UserRoot 对象都称为 userdata,而 userInfo - 分配给userdata.user - 从未声明)
    • 感谢您的评论,我已经编辑了帖子。是的,Class 不是必需的,但它只是实现它的其他方式......
    • 由于 OP 使用匿名类型,因此建议使用类有点矫枉过正。另外,我会在这里使用对象初始化语法来简化您的代码 - 它更具可读性。
    • @DavidG 是的,而且这样可以避免我的最新评论 ^^(感谢米塔尔,有时我的大脑就像一个编译器,在尝试处理你的代码时它坏了 - “ Non-declared variable userdata")
    猜你喜欢
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多