如何将具有相同名称的两个json属性转换为同一个类

时间:2017-06-26 18:10:22

标签: c# .net json

我有一个json对象:

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

现在我需要将json转换为类,

我的默认答案是将属性写为UserID,sessionID

但我希望像User.ID&amp ;;从可读性的角度来看,session.ID(这是不可能的)。

4 个答案:

答案 0 :(得分:1)

制作基类:

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
}

但是,如果用户和会话之间存在唯一的差异(但显然共享ID属性),则应该只执行此操作。

如果你只想要两个不同的变量,那么将它们解析为名为usersession的BaseId类的两个不同实例(显然不需要这样的具体类)

答案 1 :(得分:0)

您可以使用JsonPropertypublic class Model { [JsonProperty(PropertyName = "UserId")] public int ID { get; set; } [JsonProperty(PropertyName = "SessionId")] public int ID1 { get; set; } }

<LPNDetail>
          <ItemName>5054807025389</ItemName>
          <DistroNbr/>
          <DistributionNbr>TR001000002514</DistributionNbr>
          <OrderLine>2</OrderLine>
          <RefField2/>
          <RefField3>OU01180705</RefField3>
          <RefField4>0002</RefField4>
          <RefField5>Retail</RefField5>
          <Qty>4</Qty>
          <QtyUom>Unit</QtyUom>
</LPNDetail>
<LPNDetail>
          <ItemName>5054807025563</ItemName>
          <DistroNbr/>
          <DistributionNbr>TR001000002514</DistributionNbr>
          <OrderLine>4</OrderLine>
          <RefField2/>
          <RefField3>OU01180705</RefField3>
          <RefField4>0004</RefField4>
          <RefField5>Retail</RefField5>
          <Qty>2</Qty>
          <QtyUom>Unit</QtyUom>
</LPNDetail>

答案 2 :(得分:0)

我不确定我完全理解这个问题。如果我这样做,它会是这样的:

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; }
}

答案 3 :(得分:0)

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;

我被正确检查了。工作正常。