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": ""
}
}
}
]
}
我认为您可以创建两个类:
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属性进行"重命名"以进行序列化。