c#中两个同名成员

本文关键字:两个 成员 | 更新日期: 2023-09-27 17:58:16

我正在编写一个Windows应用商店应用程序(Win Phone 8.1)。

我有一个发送请求到服务器,它给出了响应:

C#:

public class Request
{
    public PWSESSIONRS PWSESSIONRS { get; set; }
}
public class Response
{
    public List<PWSESSIONR> PWSESSIONRS { get; set; }
}
public class PWSESSIONRS
{
    public PWPROCESSRS PWPROCESSRS { get; set; }
}
public class PWPROCESSRS
{
    public PWERROR PWERROR { get; set; }
    public PWHEADER PWHEADER { get; set; }
    public PWDATA PWDATA { get; set; }
}
public class PWDATA
{
    public GETBIKEDETAIL GETBIKEDETAIL { get; set; }
    public MOBAUTH MOBAUTH { get; set; }
}
public class MOBAUTH
{
    //Request:
    public List<Row> Row { get; set; }
    //Response:
    public Row Row { get; set; }
}

显示错误:

MOBAUTH已经包含行的定义

现在,如果我这样做:

public class MOBAUTH
{
    //Request:
    [JsonProperty("Row")]
    public List<Row> Row { get; set; }
    //Respnse:
    [JsonProperty("Row")]
    public Row Row_ { get; set; }
}

它显示运行时错误:

Newtonsoft类型的异常。Json。JsonSerializationException发生在Newtonsoft。Json。DLL,但未在用户代码中处理附加信息:上已存在名为"Row"的成员'我的应用程序。模型要求MOBAUTH。使用JsonPropertyAttribute指定另一个名称。

JSON请求:

{"PWSESSIONRS":{"PWPROCESSRS":{"PWERROR":null,"PWHEADER":{"DEVICE_LONGITUDE":"77.044510","PROCESS_ID":"","LOGIN_ID":"FiZqnXB4y0u4WNTYG2UXxw==","USER_ID":"FiZqnXB4y0u4WNTYG2UXxw==","IMEI_NO":"64C267E1-545D-4A2B-B726-60F332B18F44","DEVICE_MODEL":"","VERSION_ID":"1.0","PW_SESSION_ID":"3tyEwspAMHj9FvWQzSecuq/7DQMDw0MalYiPIXWaFvg=","DEVICE_LATITUDE":"28.412745","INSTALLATION_ID":"8QO8FLBU1GGEUCIHI44R+A/7DQMDW0MALYIPIXWAFVG=~HCA~614","SESSION_EXPIRE_TIME":"","ORG_ID":"HCA","APP_ID":"HCA","PW_VERSION":"","LOCATION":"","USER_SESSION_ID":"FFv4JAm8bpHauIahnRgs9ZW2ypH7NE41Dz9OZBIXJWnBiR/VRj3yaAmRx+SeZtyc","OS_VERSION":"","SERVER_TIMESTAMP":"","DEVICE_MAKE":"","OUT_PROCESS_ID":"MOBAUTH","SIM_ID":"","PW_CLIENT_VERSION":"3.1","PASSWORD":"FiZqnXB4y0u4WNTYG2UXxw==","DEVICE_TIMESTAMP":"2016-07-23 16:54:09","IS_AUTH":"","LAC":"","MCC":"","MNC":"","CID":"","LAST_TRANSACTION_ID":"","IN_PROCESS_ID":null},"PWDATA":{"GETBIKEDETAIL":null,"MOBAUTH":{"Row":[{"x_VIN":null,"x_phone_no":null,"x_reg_no":null,"x_mobile_no":"9988887777","MessageSource":null,"DetailMessage":null,"DataElements":null,"Message":null,"MsgID":null,"RefID":null,"MessageType":null}]}}}}}

JSON响应:

{
  "PWSESSIONRS": [
    {
      "PWPROCESSRS": {
        "PWERROR": {
          "MOBAUTH": {
            "Row": {
              "MessageSource": "PLATWARE",
              "DetailMessage": "JSONObject['"x_reg_no'"] not a string.",
              "DataElements": "",
              "Message": "Please pass valid JSON Data for Process.",
              "MsgID": "plat029",
              "RefID": "MOBAUTH",
              "MessageType": "Error"
            }
          }
        },
        "PWHEADER": {
          "DEVICE_MODEL": "",
          "IMEI_NO": "64C267E1-545D-4A2B-B726-60F332B18F44",
          "VERSION_ID": "1.0",
          "DEVICE_LATITUDE": "28.412745",
          "INSTALLATION_ID": "8QO8FLBU1GGEUCIHI44R+A/7DQMDW0MALYIPIXWAFVG=~HCA~614",
          "APP_ID": "HCA",
          "IS_AUTH": "Y",
          "PW_VERSION": "",
          "OS_VERSION": "",
          "DEVICE_MAKE": "",
          "OUT_PROCESS_ID": "MOBAUTH",
          "SIM_ID": "",
          "PASSWORD": "",
          "DEVICE_LONGITUDE": "77.044510",
          "LOGIN_ID": "FIZQNXB4Y0U4WNTYG2UXXW==",
          "USER_ID": "",
          "PW_SESSION_ID": "3TYEWSPAMHJ9FVWQZSECUQ/7DQMDW0MALYIPIXWAFVG=",
          "SESSION_EXPIRE_TIME": "",
          "ORG_ID": "HCA",
          "LOCATION": "",
          "IN_PROCESS_ID": "MOBAUTH",
          "USER_SESSION_ID": "FFV4JAM8BPHAUIAHNRGS9ZW2YPH7NE41DZ9OZBIXJWNBIR/VRJ3YAAMRX+SEZTYC",
          "SERVER_TIMESTAMP": "2016-07-23 18:46:01",
          "PW_CLIENT_VERSION": "3.1",
          "DEVICE_TIMESTAMP": "2016-07-23 16:54:09"
        },
        "PWDATA": {
          "MOBAUTH": ""
        }
      }
    }
  ]
}

c#中两个同名成员

我认为您可以创建两个类:

public class MOBAUTHRequest
{
    //Request:
    [JsonProperty("Row")]
    public List<Row> Row { get; set; }    
}
public class MOBAUTHResponse
{
    //Request:
    [JsonProperty("Row")]
    public Row Row { get; set; }
}

并使用适当的方法进行序列化——MOBAUTHRequest带请求,MOBAUTHResponse带响应。但正如在评论中所说,您绝对应该考虑更改命名约定以匹配C#并使用JSON。NET属性进行"重命名"以进行序列化。