我有一个对象模型,看起来像这样:
public MyObjectInJson
{
public long ObjectID {get;set;}
public string ObjectInJson {get;set;}
}
属性objectjson是一个包含嵌套列表的对象的已序列化版本。目前,我手动序列化myobjectjson的列表,就像这样:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
{
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
{
TheListBuilder.Append(",");
}
}
TheListBuilder.Append("]");
return TheListBuilder.ToString();
我想知道我是否可以用JavascriptSerializer替换这种危险的代码,并得到相同的结果。
我该怎么做呢?
. net已经通过System.Runtime.Serialization.Json命名空间和DataContractJsonSerializer类从3.5版开始支持基本的Json序列化。顾名思义,DataContractJsonSerializer会考虑添加到对象中的任何数据注释,以创建最终的Json输出。
如果您已经有带注释的数据类,想要将Json序列化到流中,这可能很方便,如如何:序列化和反序列化Json数据中所述。虽然有一些限制,但是如果你有基本的需求,并且不想在你的项目中添加Yet Another Library,它就足够好了,速度也足够快了。
下面的代码将一个列表序列化到控制台输出流。如你所见,它比Json更啰嗦。NET和非类型安全(即没有泛型)
var list = new List<string> {"a", "b", "c", "d"};
using(var output = Console.OpenStandardOutput())
{
var writer = new DataContractJsonSerializer(typeof (List<string>));
writer.WriteObject(output,list);
}
另一方面,Json。NET对如何生成Json提供了更好的控制。当你需要将javascript友好的名称映射到。net类,格式化日期到json等时,这将非常方便。
另一个选择是ServiceStack。文本,ServicStack的一部分…stack,它为Json, JSV和CSV提供了一组非常快速的序列化器。
我尝试了这里的其他答案来序列化POST请求的参数,但我的后端不喜欢这样一个事实,即我正在发送数组的字符串版本。我不想总是检查参数的类型是否为字符串并将其转换为数组。
我使用的是Json。NET(现在已内置到c#中),我将List转换为一个数组,并让转换器处理其余的工作。
public class MyObjectInJson
{
public long ID;
public OtherObject[] array;
}
可以使用List . toarray()将List转换为数组;
最后使用JsonConvert,你可以把整个对象变成一个字符串:
string jsonString = JsonConvert.SerializeObject(objectInJson);
希望这能帮助到其他人。
. net已经通过System.Runtime.Serialization.Json命名空间和DataContractJsonSerializer类从3.5版开始支持基本的Json序列化。顾名思义,DataContractJsonSerializer会考虑添加到对象中的任何数据注释,以创建最终的Json输出。
如果您已经有带注释的数据类,想要将Json序列化到流中,这可能很方便,如如何:序列化和反序列化Json数据中所述。虽然有一些限制,但是如果你有基本的需求,并且不想在你的项目中添加Yet Another Library,它就足够好了,速度也足够快了。
下面的代码将一个列表序列化到控制台输出流。如你所见,它比Json更啰嗦。NET和非类型安全(即没有泛型)
var list = new List<string> {"a", "b", "c", "d"};
using(var output = Console.OpenStandardOutput())
{
var writer = new DataContractJsonSerializer(typeof (List<string>));
writer.WriteObject(output,list);
}
另一方面,Json。NET对如何生成Json提供了更好的控制。当你需要将javascript友好的名称映射到。net类,格式化日期到json等时,这将非常方便。
另一个选择是ServiceStack。文本,ServicStack的一部分…stack,它为Json, JSV和CSV提供了一组非常快速的序列化器。