名为"Id"的成员已存在于"Model"中.使用JsonPropertyAttribute指定其他名称

dem*_*emo 2 c# mapping serialization json json.net

我有下一个结构的DTO:

public class DTO
{
   public int Id {get;set;}
   [JsonProperty("Id")]
   public int ServerId {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

从服务器我收到下一个型号的json:

public class ServerModel
{
   public int Id {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我想=> Id从服务器映射到ServerId属性将服务器映射中的json反序列化为DTO .但目前我得到错误:

名为"Id"的成员已存在DTO.使用JsonPropertyAttribute指定其他名称.

我能解决这个问题吗?或者我只是可以更改我的ServerModel以匹配我在客户端(DTO)上的内容?

dbc*_*dbc 7

如果您只是不想读取任何JSON值DTO.Id,您应该应用[JsonIgnore]它:

public class DTO
{
   [JsonIgnore]
   public int Id {get;set;}
   [JsonProperty("Id")]
   public int ServerId {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

完成后,在反序列化以下JSON:时{"Id" : 101},DTO.ServerId将得到101while 的值DTO.Id不会被设置.

因为您正在指定一个JSON数据协定,它将两个不同的c#属性映射到一个名为的JSON属性"Id".这是Json.NET不允许的,因为这样的合同无法序列化.