在C#中反序列化json后处理字典

时间:2019-10-23 12:17:47

标签: c# json dictionary

你好,我有以下Json:

{
  "login": {
    "login1": {
      "password": "Password123",
      "username": "admin1"
    },
    "login2": {
      "password": "Password123",
      "username": "admin2"
    }
  }
}

我用来反序列化Json的Class1名为LoginData:

public class LoginTypes
{

    [JsonProperty("login")]
    public Dictionary<string, LoginData> LoginData { get; set; }
}

public class LoginData
{
    [JsonProperty("username")]
    public string Username { get; set; }
    [JsonProperty("password")]
    public string Password { get; set; }
}

以及在开关中使用Json的Class 2:

private LoginData loginData = JsonConvert.DeserializeObject<LoginData>(dataJsonMap.loginJsonPath);

public void InformLogin(LoginEnum.Login loginType)
{
    switch (loginType)
    {
        case LoginEnum.Login.login1:
            browser.FillIn(userNameFieldId).With(loginData[login1].username);
            browser.FillIn(passwordFieldId).With(loginData[login1].password);
            break;
     }
 }

但是我一直收到错误消息。我无法像这样接受字典,在class2中的loginData [login1]上有一个红色下划线,表示我无法将索引应用于LoginData类型的表达式,并且找不到解决方法。我在做什么错了?

3 个答案:

答案 0 :(得分:1)

您是否有可能在JSON末尾错过了一个卷曲中断(属于Login属性)?

{
  "login": {
        "login1": {
          "password": "Password123",
          "username": "admin1"
        },
        "login2": {
          "password": "Password123",
          "username": "admin2"
        }
    } //one missing curly break
} 

此Json也对LoginTypes对象无效,对LoginData对象无效。

答案 1 :(得分:0)

您应该反序列化为“ LoginTypes”,一旦拥有该类的实例,就可以编写一些代码,例如

loginType.LoginData[loginType].Username

您当前正在反序列化到没有任何字典的LoginData。我认为您的示例JSON现在无法成功反序列化。

答案 2 :(得分:0)

对我来说,您要做什么并不十分清楚。您不会在代码中反序列化字典。 也许这种类型的代码可以为您提供帮助(但Json必须有所不同):

class LoginData
{
    [JsonProperty("username")]
    public string Username { get; set; }
    [JsonProperty("password")]
    public string Password { get; set; }
}

class OtherClassUsingYourTypes
{
    public OtherClassUsingYourTypes(string jsonData)
    {
        this.loginDictionary = JsonConvert.DeserializeObject<Dictionary<string, LoginData>>(jsonData);
    }

    private Dictionary<string, LoginData> loginDictionary;

    public void FillLogin(string loginKey)
    {
        LoginData loginValues = loginDictionary[loginKey];
        browser.FillIn(userNameFieldId).With(loginValues.Username);
        browser.FillIn(passwordFieldId).With(loginValues.Password);
    }
}