对于一些缓存,我正在考虑为即将到来的项目做的事情,我一直在考虑Java序列化.即,是否应该使用?
现在我已经在过去几年中出于各种原因编写了自定义序列化和反序列化(Externalizable).目前互操作性已成为一个问题,我可以预见需要与.Net应用程序进行交互,因此我想到了使用独立于平台的解决方案.
有没有人有过使用GPB的高性能经验?它在速度和效率方面与Java的本机序列化相比如何?或者,还有其他值得考虑的方案吗?
我已将System.Runtime.Serialization dll 的引用添加到我的项目中,但仍无法找到System.Runtime.Serialization.Json命名空间,因此无法找到DataContractJsonSerializer类.我在这里错过了什么?
我将把多个对象写入一个文件,然后在我的代码的另一部分中检索它们.我的代码没有错误,但它无法正常工作.你能帮我找一下我的代码有什么问题吗?我从不同的网站上读过不同的代码,但没有一个能为我工作!
这是我将对象写入文件的代码:MyClassList是一个arraylist,它包含我的类的对象(必须写入文件).
for (int cnt = 0; cnt < MyClassList.size(); cnt++) {
FileOutputStream fout = new FileOutputStream("G:\\address.ser", true);
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(MyClassList.get(cnt));
}
Run Code Online (Sandbox Code Playgroud)
我将"true"添加到outputstream的构造函数中,因为我想将每个对象添加到文件末尾.那是对的吗?
这是我的代码从文件中读取对象:
try {
streamIn = new FileInputStream("G:\\address.ser");
ObjectInputStream objectinputstream = new ObjectInputStream(streamIn);
MyClass readCase = (MyClass) objectinputstream.readObject();
recordList.add(readCase);
System.out.println(recordList.get(i));
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
它最终只打印一个对象.现在,我不知道我是不是写得不好还是读得不对!
我正在尝试以下列方式序列化Type对象:
Type myType = typeof (StringBuilder);
var serializer = new XmlSerializer(typeof(Type));
TextWriter writer = new StringWriter();
serializer.Serialize(writer, myType);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,对Serialize的调用会引发以下异常:
"不期望使用System.Text.StringBuilder类型.使用XmlInclude或SoapInclude属性指定静态未知的类型."
有没有办法让我序列化Type对象?请注意,我不是要尝试序列化StringBuilder自身,而是Type包含有关StringBuilder类的元数据的对象.
我需要将日期时间序列化/反序列化为yyyyMMdd格式的XML文件.我可以使用属性/解决方法吗?
我知道匿名类型被编译器标记为私有,属性是只读的.有没有办法将它们序列化为xml(没有反序列化)?它适用于JSON,我如何使用XML?
我遇到了WCF REST服务的问题.我尝试返回的wire对象具有未设置的某些属性,导致DateTime.MinValue为DateTime类型的属性.该服务返回一个空文档(HTTP状态为200 ???).当我尝试自己调用JSON序列化时,抛出的异常是:
SerializationException:转换为UTC时,大于DateTime.MaxValue或小于DateTime.MinValue的DateTime值无法序列化为JSON.
这可以通过在控制台应用程序中运行以下代码来重现:
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;
// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我认为这与我的时区(GMT + 1)有关.由于DateTime.MinValue是默认值(DateTime),我希望这可以没有问题地序列化.
有关如何使我的REST服务行为的任何提示?我不想改变我的DataContract.
我有一个应用程序使用核心数据与3个具有非常相似属性的实体.这种关系如下:
分店 - >>菜单 - >>分类 - >> FoodItem
每个实体都有一个关联的类:example

我试图在sqlite数据库中生成数据的JSON表示.
//gets a single menu record which has some categories and each of these have some food items
id obj = [NSArray arrayWithObject:[[DataStore singleton] getHomeMenu]];
NSError *err;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:&err];
NSLog(@"JSON = %@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
Run Code Online (Sandbox Code Playgroud)
但是我没有使用JSON,而是出现了SIGABRT错误.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Menu)'
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决它或如何使实体类(分支,菜单等)JSON序列化兼容?
DataContractJsonSerializer无法正确序列化字典.
{"abc":"xyz","def":42}
例如,JavaScriptSerializer序列化字典,而DataContractJsonSerializer则提供[{"Key":"abc","Value":"xyz"},{"Key":"def","Value":42}].
这确实有问题,我想知道如何在WCF服务中正确序列化Dictionary对象.我正在寻找一个需要最少努力的解决方案.
参考:http://msdn.microsoft.com/en-us/library/bb412170.aspx
这是我最终在WCF中正确使用字典串行化的解决方法:http://social.msdn.microsoft.com/forums/en-US/wcf/thread/765f1569-0422-4471-8ec2-1d03b2026771
我正在尝试编写一个C#方法,它将序列化一个模型并返回一个JSON结果.这是我的代码:
public ActionResult Read([DataSourceRequest] DataSourceRequest request)
{
var items = db.Words.Take(1).ToList();
JsonSerializerSettings jsSettings = new JsonSerializerSettings();
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
var converted = JsonConvert.SerializeObject(items, null, jsSettings);
return Json(converted, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
当我转到Chrome中的Words/Read时,我得到了以下JSON结果:
"[{\"WordId\":1,\"Rank\":1,\"PartOfSpeech\":\"article\",\"Image\":\"Upload/29/1/Capture1.PNG\",\"FrequencyNumber\":\"22038615\",\"Article\":null,\"ClarificationText\":null,\"WordName\":\"the | article\",\"MasterId\":0,\"SoundFileUrl\":\"/UploadSound/7fd752a6-97ef-4a99-b324-a160295b8ac4/1/sixty_vocab_click_button.mp3\",\"LangId\":1,\"CatId\":null,\"IsActive\":false}
Run Code Online (Sandbox Code Playgroud)
我认为\'转义引号是双重序列化对象时出现的问题.从其他问题: WCF JSON输出添加了不需要的引号和反斜杠
它看起来好像是我对我的对象进行双重序列化,因为我首先使用JSON.NET进行序列化,然后将我的结果传递给Json()函数.我需要手动序列化以避免引用循环,但我认为我的View需要一个ActionResult.
我怎样才能在这里返回一个ActionResult?我需要,还是只能返回一个字符串?