天道酬勤,学无止境

serialization

Jackson custom serializer serialize field twice if property name not equal field name

问题 如果您使用自定义序列化,如果属性名称不等于字段名称,您会得到意想不到的效果。 为什么该字段被序列化两次? 我的代码示例: class Mode { @JsonProperty("mode") @JsonSerialize(using = ModeSerializer.class) private boolean isPublic; public Mode(boolean isPublic) { this.isPublic = isPublic; } public boolean isPublic() { return isPublic; } } 这是我的自定义字段序列化器: class ModeSerializer extends JsonSerializer<Boolean> { @Override public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { String out = "private"; if (value) { out = "public"; } gen.writeString(out); } } 这里是测试: public class Test {

2022-05-17 04:44:04    分类:技术分享    java   json   serialization   jackson

Disable JSON.Net PreserveReferencesHandling for single external type

问题 我遇到了外部资源不接受生成的 JSON 中的 $id 和 $ref 属性的问题。 但是由于我们内部需要这个,我不能只全局禁用 PreserveReferencesHandling。 如何仅针对一种类型禁用此功能? 我已经看到了[JsonObject]属性,但是由于此类来自外部源,因此我无法向其添加属性...我查看了 IContractResolver 但无法弄清楚如何在此处禁用引用处理。 谢谢! JSON.Net v10.0.2 回答1 这可以通过覆盖 DefaultContractResolver.CreateContract() 设置 JsonContract.IsReference == false 的自定义 ContractResolver 来完成: public class DisableReferencePreservationContractResolver : DefaultContractResolver { readonly HashSet<Type> types; public DisableReferencePreservationContractResolver(IEnumerable<Type> types) { this.types = new HashSet<Type>(types); } bool ContainsType(Type type

2022-05-17 03:58:19    分类:技术分享    c#   serialization   json.net

Gson Parsing Generic List From Reflected Field Type

问题 我在将列表类型从反射对象转换为该对象的 set 方法时遇到问题。 我不确定问题是在前端还是在 Gson 解析端,但我的测试代码在这里: public static void main(String[] args) throws Exception{ String json = "[52881]"; ListObject lo = new ListObject(); for(Field f : lo.getClass().getDeclaredFields()) if(List.class.isAssignableFrom(f.getType())){ Method m = lo.getClass().getMethod( new StringBuilder("set").append(f.getName().substring(0,1).toUpperCase()).append(f.getName().substring(1,f.getName().length())).toString(), f.getType() ); System.out.println(((ParameterizedType) f.getGenericType()).getActualTypeArguments()[0]); getListFromJson(m, lo, json, (

2022-05-17 02:50:37    分类:技术分享    java   list   generics   serialization   gson

How can I parse serialized data with PHP?

问题 这是我的序列化数据的示例: a:10:{s:7:"contact";s:1:"1";s:19:"profile_affiliation";s:23:"University, Inc.";s:18:"profile_first_name";s:3:"Ben";s:22:"profile_street_address";s:19:"8718 Tot Ave. S.";s:12:"profile_city";s:6:"Mobile";s:13:"profile_state";s:2:"AL";s:15:"profile_country";s:3:"USA";s:15:"profile_zipcode";s:5:"36695";s:18:"profile_home_phone";s:10:"2599494420";s:17:"profile_last_name";s:6:"Powers";} 我希望能够用 PHP 解析它并显示如下值: profile_first_name:本 profile_last_name:权力 profile_state: 铝 我知道我需要像这样反序列化它: $unserialize = unserialize($data); 但我无法用 PHP 解析数组。 我不断收到“为 foreach() 提供的参数无效”错误和不正确的数组输出。 回答1 这就是你要找的

2022-05-16 20:18:09    分类:技术分享    php   parsing   serialization

Pass object with methods between languages

问题 下面的 C# 代码可以在一个程序中创建一个对象,将其序列化并将其发送到端点。 接收者可以反序列化数据并调用对象方法之一。 [Serializable] public class MyClass { private int myInt; private string myString; public MyClass(int i, string s) ... public virtual void SayHello() { // Do something } } 发件人: MyClass myClass = new MyClass(1, "a"); IFormatter formatter = new BinaryFormatter(); formatter.Serialize(someOutputStream, myClass); 接收者: IFormatter formatter = new BinaryFormatter(); MyClass myClass = formatter.Deserialize(someInputStream) as MyClass; myClass?.SayHello(); 如果双方都具有具有 MyClass 声明的相同 dll,则此功能成为可能。 我的问题是:当涉及到 C# 服务器和 Java 客户端(android)之间的通信时

2022-05-16 09:27:15    分类:技术分享    java   c#   android   serialization

Unable to deserialize java.awt.color using jackson deserializer

问题 public class TestJacksonColor { public static void main(String [] args) throws IOException { ObjectMapper objectMapper = new ObjectMapper(); Color black = new Color(0, 0, 0); String json = objectMapper.writeValueAsString(black); Color backToObject = objectMapper.readValue(json, Color.class); } } 该代码尝试使用 jackson objectmapper 将 java.awt.color 类序列化。 获取生成的 json 字符串并将其反序列化回 java.awt.color 类。 但是,在进行反序列化时会发生以下错误。 线程“主”com.fasterxml.jackson.databind.JsonMappingException 中的异常:没有为类型 [简单类型,类 java.awt.Color] 找到合适的构造函数:无法从 JSON 对象实例化 回答1 您将需要一个自定义序列化器和反序列化器。 周围有一些预先构建的模块,但我不知道有一个可以处理java.awt.Color 。

2022-05-16 01:44:20    分类:技术分享    java   json   serialization   jackson   deserialization

Django: Serialize a model with a many-to-many relationship with a through argument

问题 该模型定义了一个文章和一个作者类。 它们以多对多的关系联系在一起。 这种关系是通过自定义中间表定义的: # models.py class Article(models.Model): title = models.CharField(max_length=500) authors = models.ManyToManyField(Author, through='AuthorOrder') class Author(models.Model): name = models.CharField(max_length=255) class AuthorOrder(models.Model): author = models.ForeignKey(Author) article = models.ForeignKey(Article) writing_order = models.IntegerField() 序列化应返回如下 JSON: #articles_json {"fields": { "title": "A title", "authors": [ { "name":"Author 1", "writing_order": 1 }, { "name":"Author 2", "writing_order": 2 } } } } 我已经确定了两种解决方案。

2022-05-16 00:32:06    分类:技术分享    django   serialization

How to Serialize and Deserialize ArrayList of Arrays by using Json.NET

问题 我需要在我的应用程序中使用 JSON.NET 将对象序列化/反序列化为 json。 Object 的属性类型为 ArrayList,其中包含字符串数组。 为了模拟它,我编写了以下单元测试; public class JsonTests { public class MyTestClass { public ArrayList Items { get; private set; } public MyTestClass() { this.Items = new ArrayList(); } } [Fact] public void JsonConvert_Should_Serialize_ArrayList_And_Deserialize_Successfully() { MyTestClass myObject = new MyTestClass(); myObject.Items.Add(new string[] { "Test1", "Test2" }); string jsonResult = JsonConvert.SerializeObject(myObject); MyTestClass tempMyObject = JsonConvert.DeserializeObject<MyTestClass>(jsonResult); //(tempMyObject

2022-05-15 20:20:27    分类:技术分享    c#   json   serialization   json.net

PHP: __toString() and json_encode() not playing well together

问题 我遇到了一个奇怪的问题,我不知道如何解决它。 我有几个类都是 JSON 对象的 PHP 实现。 这是问题的说明 class A { protected $a; public function __construct() { $this->a = array( new B, new B ); } public function __toString() { return json_encode( $this->a ); } } class B { protected $b = array( 'foo' => 'bar' ); public function __toString() { return json_encode( $this->b ); } } $a = new A(); echo $a; 这个的输出是 [{},{}] 当所需的输出是 [{"foo":"bar"},{"foo":"bar"}] 问题是我依靠 __toString() 钩子为我做我的工作。 但它不能,因为 json_encode() 使用的序列化不会调用 __toString()。 当它遇到一个嵌套对象时,它只是简单地序列化公共属性。 那么,问题就变成了:有没有一种方法可以为 JSON 类开发一个托管接口,既可以让我使用 setter 和 getter 作为属性,又可以让我获得我想要的 JSON

2022-05-15 10:18:05    分类:技术分享    php   json   serialization

What is the best practice for saving and retrieving a java object? [closed]

问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改进这个问题? 更新问题,使其仅通过编辑此帖子专注于一个问题。 5年前关闭。 改进这个问题 我正在编写一个作为文档存储的 Java 应用程序。 我创建我的对象并通过序列化将它们保存到磁盘。 当我从磁盘加载对象时遇到了一个错误,但实际上我已经更改了它正在序列化的基础对象。 这似乎是管理存储对象的一种不好的方法,如果我用对基础对象的更改来更新我的软件,我磁盘上的所有对象都将无效。 在处理这个问题时是否有指导或最佳实践? 还是有更好的方法来保存我的数据? 回答1 您需要阅读 Java Object Serialization Specification,特别是 Compatible Java Type Evolution 部分和紧随其后的部分 Type Changes Affecting Serialization。 第 1.10 节规定: 对于可序列化的对象,即使存在不同(但兼容)的类实现版本,也会保留足够的信息来恢复这些对象。 作为开发人员,您有责任确保对类的更改不会与早期的序列化版本冲突。 这并不像你想象的那么难。 大多数情况下,您需要避免不兼容的更改: 不要删除字段。 如果不再使用,请弃用它。 (这包括使实例字段成为static字段;静态字段不被序列化,因此就序列化而言,这相当于将其删除。) 不要更改字段的类型。

2022-05-15 01:14:04    分类:技术分享    java   serialization