C# Json.Net将集合序列化为命名属性
我正在创建一个Xamarin应用程序,其中包含由和其他库管理的API调用,并正在考虑将对象集合序列化为Json属性数组 我的问题是如何使用Json.Net将MemberBooking类型中的MemberSlot对象集合序列化为所需的Json 对象的名称将始终为数字1->4,但部分或全部可能不存在 问题C# Json.Net将集合序列化为命名属性,c#,json,xamarin,json.net,refit,C#,Json,Xamarin,Json.net,Refit,我正在创建一个Xamarin应用程序,其中包含由和其他库管理的API调用,并正在考虑将对象集合序列化为Json属性数组 我的问题是如何使用Json.Net将MemberBooking类型中的MemberSlot对象集合序列化为所需的Json 对象的名称将始终为数字1->4,但部分或全部可能不存在 问题 { "member_booking_request":{ "course_id":1, "date":"2016-09-29", "time":"
{
"member_booking_request":{
"course_id":1,
"date":"2016-09-29",
"time":"09:00",
"slots":[
{
"type":"Member",
"holes":18,
"user_id":110
},
{
"type":"Member",
"holes":18,
"user_id":111
},
{
"type":"Member",
"holes":18,
"user_id":112
},
{
"type":"Member",
"holes":18,
"user_id":117
]
}
}
}
{
"member_booking_request":{
"course_id":1,
"date":"2016-09-29",
"time":"09:00",
"slots":{
"1":{
"type":"Member",
"holes":18,
"user_id":110
},
"2":{
"type":"Member",
"holes":18,
"user_id":111
},
"3":{
"type":"Member",
"holes":18,
"user_id":112
},
"4":{
"type":"Member",
"holes":18,
"user_id":117
}
}
}
}
我是否可以将MemberBooking对象中的List属性更改为Dictionary并适当填充字符串键
对象继承权
public class MemberBookingRequest
{
[JsonProperty("member_booking_request")]
public MemberBooking Booking { get; set; }
}
public class MemberBooking
{
[JsonProperty("course_id")]
public int CourseId { get; set; }
[JsonProperty("date")]
public string TeeDate { get; set; }
[JsonProperty("time")]
public string TeeTime { get; set; }
[JsonProperty("slots")]
public List<MemberSlot> Slots { get; set; }
}
public class MemberSlot
{
[JsonIgnore]
public int Id { get; set; }
[JsonProperty("type")]
public BookingType Type { get; set; }
[JsonProperty("holes")]
public int Holes { get; set; }
[JsonProperty("user_id")]
public int MemberId { get; set; }
}
所需的Json
{
"member_booking_request":{
"course_id":1,
"date":"2016-09-29",
"time":"09:00",
"slots":[
{
"type":"Member",
"holes":18,
"user_id":110
},
{
"type":"Member",
"holes":18,
"user_id":111
},
{
"type":"Member",
"holes":18,
"user_id":112
},
{
"type":"Member",
"holes":18,
"user_id":117
]
}
}
}
{
"member_booking_request":{
"course_id":1,
"date":"2016-09-29",
"time":"09:00",
"slots":{
"1":{
"type":"Member",
"holes":18,
"user_id":110
},
"2":{
"type":"Member",
"holes":18,
"user_id":111
},
"3":{
"type":"Member",
"holes":18,
"user_id":112
},
"4":{
"type":"Member",
"holes":18,
"user_id":117
}
}
}
}
您必须更改创建插槽属性的方式。在填充插槽字典时,将MemberSlot.Id指定为键,将MemberSlot本身指定为值
public class MemberBooking
{
[JsonProperty("course_id")]
public int CourseId { get; set; }
[JsonProperty("date")]
public string TeeDate { get; set; }
[JsonProperty("time")]
public string TeeTime { get; set; }
[JsonProperty("slots")]
public Dictionary<int,MemberSlot> Slots { get; set; }
}
public class会员预订
{
[JsonProperty(“课程id”)]
public int CourseId{get;set;}
[JsonProperty(“日期”)]
公共字符串TeeDate{get;set;}
[JsonProperty(“时间”)]
公共字符串TeeTime{get;set;}
[JsonProperty(“插槽”)]
公共字典槽{get;set;}
}
此示例将使用字典提供所需的json输出
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace jsonconversion
{
public class Program
{
public static void Main(string[] args)
{
Dictionary<int,MemberSlot> slots=new Dictionary<int, MemberSlot>();
MemberSlot slot1 = new MemberSlot() {Id = 1, Holes =2, MemberId = 1};
slots.Add(1,slot1);
MemberBookingRequest mbr = new MemberBookingRequest
{
Booking = new MemberBooking()
{CourseId = 1, TeeDate ="",TeeTime = "",Slots = slots}
};
string jd = JsonConvert.SerializeObject(mbr);
Console.WriteLine(jd);
}
}
public class MemberBookingRequest
{
[JsonProperty("member_booking_request")]
public MemberBooking Booking { get; set; }
}
public class MemberBooking
{
[JsonProperty("course_id")]
public int CourseId { get; set; }
[JsonProperty("date")]
public string TeeDate { get; set; }
[JsonProperty("time")]
public string TeeTime { get; set; }
[JsonProperty("slots")]
public Dictionary<int, MemberSlot> Slots { get; set; }
}
public class MemberSlot
{
[JsonIgnore]
public int Id { get; set; }
[JsonProperty("holes")]
public int Holes { get; set; }
[JsonProperty("user_id")]
public int MemberId { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用Newtonsoft.Json;
名称空间JSONversion
{
公共课程
{
公共静态void Main(字符串[]args)
{
字典槽=新字典();
MemberSlot slot1=new MemberSlot(){Id=1,Holes=2,MemberId=1};
插槽。添加(1,插槽1);
MemberBookingRequest mbr=新建MemberBookingRequest
{
预订=新会员预订()
{CourseId=1,TeeDate=“”,TeeTime=“”,Slots=Slots}
};
字符串jd=JsonConvert.SerializeObject(mbr);
控制台写入线(jd);
}
}
公共类MemberBookingRequest
{
[JsonProperty(“会员预订请求”)]
公共会员预订{get;set;}
}
公开课会员预订
{
[JsonProperty(“课程id”)]
public int CourseId{get;set;}
[JsonProperty(“日期”)]
公共字符串TeeDate{get;set;}
[JsonProperty(“时间”)]
公共字符串TeeTime{get;set;}
[JsonProperty(“插槽”)]
公共字典槽{get;set;}
}
公共类成员槽
{
[JsonIgnore]
公共int Id{get;set;}
[JsonProperty(“孔”)]
公共整数孔{get;set;}
[JsonProperty(“用户id”)]
public int MemberId{get;set;}
}
}
您可以显示“所需的json”,但如果您也显示“当前的json”,那就更好了!