我正在写一个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已经包含Row
的定义
现在,如果我这样做:
public class MOBAUTH
{
//Request:
[JsonProperty("Row")]
public List<Row> Row { get; set; }
//Respnse:
[JsonProperty("Row")]
public Row Row_ { get; set; }
}
它显示运行时错误:
类型&#39; Newtonsoft.Json.JsonSerializationException&#39;的例外情况 发生在Newtonsoft.Json.DLL但未在用户代码中处理 附加信息:名为&#39; Row&#39;的成员已存在 &#39; MyApp.Model.Request.MOBAUTH&#39 ;.使用JsonPropertyAttribute 指定另一个名称。
JSON REQUEST:
{"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": ""
}
}
}
]
}
答案 0 :(得分:1)
我认为你可以创建两个类:
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属性来“重命名”序列化。