簡體   English   中英

如何將具有相同名稱的兩個json屬性轉換為同一類中的屬性

[英]How to convert two json properties that have same name into properties in same class

我有一個JSON對象:

{
    "user": {
        "id": "xxx"
    },
    "session": {
        "id": "xxx"
    }
}

現在我需要將json轉換為類,

我的默認答案是將屬性寫為UserID,sessionID

但是從可讀性的角度來看,我希望像User.ID和session.ID這樣的東西(不可能)。

創建一個基類:

public class BaseId //Come up with a better name
{
    public string Id { get; set; }
}

然后從這些類繼承它:

public class User : BaseId 
{
    //Other stuff if you want
}

public class Session : BaseId 
{
    //Other stuff if you want
}

但是,只有在User和Session彼此具有唯一差異(但顯然共享ID屬性)的情況下,才應執行此操作。

如果只需要兩個不同的變量,則將它們解析為名為usersession的BaseId類的兩個不同實例(顯然,不需要這種具體的類)

您可以使用Newtonsoft.Json JsonProperty

public class Model
{
    [JsonProperty(PropertyName = "UserId")]
    public int ID { get; set; }

    [JsonProperty(PropertyName = "SessionId")]
    public int ID1 { get; set; }
}

我不確定我是否完全理解這個問題。 如果我要這樣做,它將看起來像這樣:

public class Foo
{
    [JsonProperty("user")]
    public User UserIdentity { get; set; }

    [JsonProperty("session")]
    public Session CurrentSession { get; set; }
}

public class User
{
    [JsonProperty("id")]
    string Id { get; set; }
}

public class Session
{
    [JsonProperty("id")]
    string Id { get; set; }
}
public class User
{
    [JsonProperty("id")]
    public string id { get; set; }
}

public class Session
{
    [JsonProperty("id")]
    public string id { get; set; }
}

public class MyJson 
{
    [JsonProperty("user")]
    private User user { get; set; }
    [JsonProperty("session")]
    private Session session { get; set; }     
    public string UserID { get { return user.id; }  } 
    public string SessionID { get { return session.id; } }
}

您可以編寫這種類型的模型,您可以根據請求的UserID和SessionID類型獲取數據。

在下面的示例代碼中進行測試

 var teststring = JsonConvert.DeserializeObject<JObject>("{\"user\": {\"id\": \"xxx\"},\"session\": {\"id\": \"xxx\"}");
 var data = JsonConvert.DeserializeObject<MyJson>(teststring.ToString());
 var session = data.SessionID;
 var userId = data.UserID;

我被正確檢查了。 工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM