【发布时间】:2019-01-19 21:47:33
【问题描述】:
我在反序列化 Json 消息中的另一个列表时遇到问题。 我的代码可以很好地读取 Project、Ref、Latitude 等数据... 我也尝试了这两种方法:列表和数组。
例如我的 JSON 消息:
[{
"Project":"example",
"Ref":"001BC50C70000A21",
"Latitude":43.643166,
"Longitude":1.454769,
"ParkList": [{
"Id":"001BC50C70000A21P1",
"State":1,
"DateTime":"2018-02-15T08:07:18.987Z"
}, {
"Id":"001BC50C70000A21P2",
"State":1,
"DateTime":"2018-02-15T08:11:41.824Z"
}]
}]
我的班级:
[DataContract]
public class KMessage
{
private string ProjectField;
private string RefField;
private float LatitudeField;
private float LongitudeField;
public List<TParkList> ParkList { get; set; }
[DataMember]
public string Project
{
get
{
return this.ProjectField;
}
set
{
this.ProjectField = value;
}
}
[DataMember]
public string Ref
{
get
{
return this.RefField;
}
set
{
this.RefField = value;
}
}
[DataMember]
public float Latitude
{
get
{
return this.LatitudeField;
}
set
{
this.LatitudeField = value;
}
}
[DataMember]
public float Longitude
{
get
{
return this.LongitudeField;
}
set
{
this.LongitudeField = value;
}
}
}
[DataContract]
public class TParkList
{
private string IdField;
private int StateField;
private string DateTimeField;
[DataMember]
public string Id
{
get
{
return this.IdField;
}
set
{
this.IdField = value;
}
}
[DataMember]
public int State
{
get
{
return this.StateField;
}
set
{
this.StateField = value;
}
}
[DataMember]
public string DateTime
{
get
{
return this.DateTimeField;
}
set
{
this.DateTimeField = value;
}
}
}
以及测试的主要代码。所以“kmsg.ParkList”的列表是空的:
[ServiceContract]
public interface IKService
{
[DataContractFormat]
[OperationContract]
[WebInvoke(
Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/state")]
void Service(Stream KStream);
}
public class KService : IKService
{
public void Service(Stream KStream)
{
try
{
if (KStream == null)
{
MessageBox.Show("WebService message is NULL");
}
else
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<KMessage>));
var obj = (List<KMessage>)serializer.ReadObject(KStream);
foreach (KMessage kmsg in obj)
{
MessageBox.Show("Project", kmsg.Project);
foreach (var pklist in kmsg.ParkList)
{
MessageBox.Show("List - Id", pklist.Id.ToString());
}
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
感谢您的帮助。
【问题讨论】:
-
我更新了我的答案,请检查一下,这可能会有所帮助.. 实施:dotnetfiddle.net/UqxAyR
标签: c# json list serialization