C# .NET JsonConverter元组列表
我正在尝试使用一个自定义JsonConverter在序列化期间将列表转换为列表。所以,如果我在该列表上预执行JsonConvert.Serialized对象时有一个列表,我希望它序列化该列表,就像它是List类型一样。原因是元组的Item2字段已经格式化为Json,因此我想将其包装为JRaw值,以便在序列化期间不会将其作为字符串读取 JSONConverter上的文档有点稀疏。我一直在stack overflow和google上寻找类似的问题,但似乎找不到关于如何创建JSONConverter的好教程。任何关于这个具体例子的帮助或者一个好教程的链接都会非常棒 对于那些好奇的人,这是我的第一次尝试: ``` ```C# .NET JsonConverter元组列表,c#,.net,json.net,C#,.net,Json.net,我正在尝试使用一个自定义JsonConverter在序列化期间将列表转换为列表。所以,如果我在该列表上预执行JsonConvert.Serialized对象时有一个列表,我希望它序列化该列表,就像它是List类型一样。原因是元组的Item2字段已经格式化为Json,因此我想将其包装为JRaw值,以便在序列化期间不会将其作为字符串读取 JSONConverter上的文档有点稀疏。我一直在stack overflow和google上寻找类似的问题,但似乎找不到关于如何创建JSONConverter的
这应该可以澄清我在编写JSONConverter时所做的一切误解。顺便说一下,我对C语言也是一种来自Java的新语言。你能展示一下你的代码吗?如果没有,我们对你的问题和方法一无所知 另外,你们能澄清一下清单吗?因为这很可能是不可行的。你为什么需要元组?是的,它将存储一个有序列表,如果您构建一个存储所有值的对象,理论上这是多余的 此代码将实现以下功能: 客户: 这将构建我们的对象,将在下面的示例中反序列化
order.push(BuildOrder(product, quantity, price)); // Fill our Array
var convert = JSON.stringfy(order);
$.ajax({
url: 'location to your page',
data: { Order: convert },
type: 'POST',
success: function (order) {
// Returned object, how should it apply to your page.
}
});
然后在服务器端代码中,您将有一个模型:
public class Order
{
public string Product { get; set; }
public string Quantity { get; set; }
public string Price { get; set; }
}
现在,在正在解决的页面上,您只需执行以下操作:
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<Order> deserialize = serializer.Deserialize<List<Order>>(order);
foreach(var content in deserialize)
{
// Iterate through your client data sent to the server.
}
。。。之后,您将把对象发送回客户机以获取数据。这是前提,但没有更多的澄清,我们无法确定您想要什么。尽管我的问题中存在一些快速性问题,我的设计选择中也存在一些问题,以防有人发现他们与我有类似的问题,我将发布我最终使用的JsonConverter: ``` ``` NewtonSoft已经知道如何将列表编写为Json,我只需要序列化它
我还发现,访问这个以及这个也很有帮助。如果我们知道您的问题,任何关于这个特定示例或链接的帮助都会很好。。到目前为止,您尝试了哪些不起作用的方法?作为错误或意外输出,您得到了什么?如果我们不能完全理解您的问题,我们将无能为力:那么您的实际问题是什么?你的代码有错误吗?意外的结果?
public class Order
{
public string Product { get; set; }
public string Quantity { get; set; }
public string Price { get; set; }
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<Order> deserialize = serializer.Deserialize<List<Order>>(order);
foreach(var content in deserialize)
{
// Iterate through your client data sent to the server.
}
public class DataJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
List<Tuple<string, JRaw>> jlist = ((List<Tuple<string, string>>)value).Select(t => new Tuple<string, JRaw>(t.Item1, new JRaw(t.Item2))).ToList();
serializer.Serialize(writer, jlist);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray jarray = JArray.Load(reader);
List<Tuple<string, string>> result = new List<Tuple<string, string>>();
string item1;
string item2;
foreach (JObject j in jarray)
{
item1 = j.GetValue("Item1").ToString();
item2 = j.GetValue("Item2").ToString();
result.Add(new Tuple<string, string>(item1, item2));
}
return result;
}
public override bool CanConvert(Type objectType)
{
return typeof(List<Tuple<string, string>>).IsAssignableFrom(objectType);
}
}