我怎样才能优雅地序列化lambda?
例如,下面的代码抛出一个NotSerializableException.如何在不创建SerializableRunnable"虚拟"界面的情况下修复它?
public static void main(String[] args) throws Exception {
File file = Files.createTempFile("lambda", "ser").toFile();
try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(file))) {
Runnable r = () -> System.out.println("Can I be serialized?");
oo.writeObject(r);
}
try (ObjectInput oi = new ObjectInputStream(new FileInputStream(file))) {
Runnable r = (Runnable) oi.readObject();
r.run();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试查找有关如何序列化对象以查询字符串格式的信息,但我的所有搜索都在结果中淹没了如何以其他方式(字符串/表单/任何JSON).
我有
{ one: 'first', two: 'second' }
Run Code Online (Sandbox Code Playgroud)
而且我要
?one=first&two=second
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我不介意插件或其他东西 - 如果我发现的代码不是插件,我可能会重新写一个...
给出以下XML:
<?xml version="1.0"?>
<user_list>
<user>
<id>1</id>
<name>Joe</name>
</user>
<user>
<id>2</id>
<name>John</name>
</user>
</user_list>
Run Code Online (Sandbox Code Playgroud)
以下课程:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用XmlSerializer将xml反序列化为List<User>?如果是这样,我需要使用哪种类型的附加属性,或者我需要使用哪些其他参数来构造XmlSerializer实例?
User[]如果有点不太可取的话,array()是可以接受的.
我能够将一个对象序列化为一个文件然后再次恢复它,如下一个代码片段所示.我想将对象序列化为字符串并存储到数据库中.谁能帮我?
LinkedList<Diff_match_patch.Patch> patches = // whatever...
FileOutputStream fileStream = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fileStream);
os.writeObject(patches1);
os.close();
FileInputStream fileInputStream = new FileInputStream("foo.ser");
ObjectInputStream oInputStream = new ObjectInputStream(fileInputStream);
Object one = oInputStream.readObject();
LinkedList<Diff_match_patch.Patch> patches3 = (LinkedList<Diff_match_patch.Patch>) one;
os.close();
Run Code Online (Sandbox Code Playgroud) public class Contact implements Serializable {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Run Code Online (Sandbox Code Playgroud)
Serializable什么时候应该实现界面? 有很多关于如何序列化模型查询集的文档,但是如何将模型实例的字段序列化为JSON?
我有一个set包含对象__hash__和__eq__方法的Python ,以确保集合中不包含任何重复项.
我需要对这个结果进行json编码set,但是将一个空值传递set给该json.dumps方法会引发一个问题TypeError.
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: set([]) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一个json.JSONEncoder具有自定义default方法的类的扩展,但我甚至不确定从哪里开始转换set.我应该set使用默认方法中的值创建字典,然后返回编码吗?理想情况下,我想使默认方法能够处理原始编码器所扼杀的所有数据类型(我使用Mongo作为数据源,所以日期似乎也引发了这个错误)
任何暗示正确的方向将不胜感激.
编辑:
谢谢你的回答!也许我应该更精确.
我在这里使用(和upvoted)答案来解决set被翻译的限制,但是内部键也是一个问题.
这些对象set是转换为的复杂对象__dict__,但它们本身也可以包含其属性的值,这些值可能不适用于json编码器中的基本类型.
这里有很多不同的类型set,哈希基本上计算了实体的唯一ID,但是在NoSQL的真正精神中,没有确切知道子对象包含的内容.
一个对象可能包含日期值 …
我听说Json.NET比DataContractJsonSerializer更快,想试一试......
但我在JsonConvert上找不到任何采用流而不是字符串的方法.
例如,为了在WinPhone上反序列化包含JSON的文件,我使用以下代码将文件内容读入字符串,然后反序列化为JSON.在我的(非常临时)测试中,使用DataContractJsonSerializer直接从流中反序列化似乎要慢4倍...
// DCJS
DataContractJsonSerializer dc = new DataContractJsonSerializer(typeof(Constants));
Constants constants = (Constants)dc.ReadObject(stream);
// JSON.NET
string json = new StreamReader(stream).ReadToEnd();
Constants constants = JsonConvert.DeserializeObject<Constants>(json);
Run Code Online (Sandbox Code Playgroud)
我做错了吗?
我正在寻找在PyTorch中保存训练模型的替代方法.到目前为止,我找到了两种选择.
我的问题是,为什么第二种方法更受欢迎?是否因为torch.nn模块具有这两个功能而我们被鼓励使用它们?
我试图在我的rails应用程序中将哈希映射ID保存到多次尝试中.我迁移到数据库以适应这个新列:
class AddMultiWrongToUser < ActiveRecord::Migration
def self.up
add_column :users, :multi_wrong, :string
end
def self.down
remove_column :users, :multi_wrong
end
end
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我有:
class User < ActiveRecord::Base
serialize :multi_wrong, Hash
end
Run Code Online (Sandbox Code Playgroud)
但是,当我使用rails控制台通过执行以下操作来测试时:
user = User.create()
user.multi_wrong = {"test"=>"123"}
user.save
Run Code Online (Sandbox Code Playgroud)
输出为false.这里出了什么问题?
serialization ×10
java ×3
python ×3
json ×2
.net ×1
activerecord ×1
c# ×1
django ×1
java-8 ×1
javascript ×1
jquery ×1
json.net ×1
lambda ×1
pytorch ×1
query-string ×1
ruby ×1
set ×1
tensor ×1