我最近一直在阅读关于序列化。 我读过,当我使用XmlSerialization我不能序列化对象图。 什么是对象图,为什么我不能简单地序列化它?
我正在扩展一个实现Serializable接口的类(ArrayBlockingQueue)。 Sun的文档(和我的IDE)build议我应该设置这个值来防止恶作剧: 但是,强烈build议所有可序列化的类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息高度敏感,这些类可能因编译器实现而异,因此在反序列化期间可能会导致意外的InvalidClassException。 现在,我不在乎什么价值放在那里。 有关系吗?
我试图按以下方式序列化一个Type对象: Type myType = typeof (StringBuilder); var serializer = new XmlSerializer(typeof(Type)); TextWriter writer = new StringWriter(); serializer.Serialize(writer, myType); 当我这样做时,对Serialize的调用引发以下exception: “typesSystem.Text.StringBuilder不是预期的,请使用XmlInclude或SoapInclude属性指定静态未知的types。 有没有一种方法可以序列化Type对象? 请注意,我不是试图序列化StringBuilder本身,而是包含有关StringBuilder类的元数据的Type对象。
当我写这样的代码 [XmlIgnore] [NonSerialized] public List<string> paramFiles { get; set; } 我得到以下错误: Attribute 'NonSerialized' is not valid on this declaration type. It is only valid on 'field' declarations. 如果我写 [field: NonSerialized] 我收到以下警告 'field' is not a valid attribute location for this declaration. Valid attribute locations for this declaration are 'property'. All attributes in this block will […]
我正在实现一个RESTful Web服务,用户必须发送一个签名的validation令牌以及请求,这样我才能确保请求没有被中间人篡改。 我目前的实施情况如下。 validation令牌是VerifData对象,序列化为一个string,然后进行散列和encryption。 class VerifData { int prop1; int prop2; } 在我的服务中,我将数据序列化为VerifData实例,然后使用Jackson ObjectMapper对其进行序列化,并与validation令牌一起传递给validation引擎。 VerfiData verifData = new VerifData(12345, 67890); ObjectMapper mapper = new ObjectMapper(); String verifCodeGenerated = mapper.writeValueAsString(verifData); 但是似乎每次启动应用程序容器时,ObjectMapper映射到一个string的属性的顺序都会改变。 例如:有一次 {"prop1":12345,"prop2":67890} 还有一次呢 {"prop2":67890,"prop1":12345} 所以,如果客户端已经将VerifData实例序列化为第一个string,那么即使它是正确的,它也有50%的机会失败。 有没有办法解决这个问题? 我可以通过ObjectMapper指定要映射的属性的顺序吗(就像升序一样)? 或者还有其他的方式来最好地实施这个validation步骤。 客户端和服务器实现都是由我开发的。 我使用Java安全API进行签名和validation。
如何反序列化包含不区分大小写的枚举值的JSONstring? (使用Jackson Databind) JSONstring: [{"url": "foo", "type": "json"}] 和我的Java POJO: public static class Endpoint { public enum DataType { JSON, HTML } public String url; public DataType type; public Endpoint() { } } 在这种情况下,使用"type":"json"反序列化JSON将会失败,因为"type":"JSON"将起作用。 但是我希望"json"也可以用于命名约定的原因。 序列化POJO也会导致大写"type":"JSON" 我想过使用@JsonCreator和@JsonGetter: @JsonCreator private Endpoint(@JsonProperty("name") String url, @JsonProperty("type") String type) { this.url = url; this.type = DataType.valueOf(type.toUpperCase()); } //…. @JsonGetter […]
我刚刚发现在Java中,你可以声明一个字段“静态瞬态” – 编译器不抱怨。 众所周知,这似乎没有任何用处,因为静态字段没有被序列化。 但是我想知道,实际上是否有一个“静态瞬态”字段有用的情况?
我通常在C#编写代码的所有部分,编写序列化的协议时,我使用FastSerializer快速和有效地序列化/反序列化类。 这也很容易使用,而且相当直接的做“版本化”,即处理不同版本的序列化。 我通常使用的东西看起来像这样: public override void DeserializeOwnedData(SerializationReader reader, object context) { base.DeserializeOwnedData(reader, context); byte serializeVersion = reader.ReadByte(); // used to keep what version we are using this.CustomerNumber = reader.ReadString(); this.HomeAddress = reader.ReadString(); this.ZipCode = reader.ReadString(); this.HomeCity = reader.ReadString(); if (serializeVersion > 0) this.HomeAddressObj = reader.ReadUInt32(); if (serializeVersion > 1) this.County = reader.ReadString(); if (serializeVersion > […]
我有一个类定义了一个不可变的值types,我现在需要序列化。 不变性来自构造函数中设置的最终字段。 我试过序列化,它的工作原理(令人惊讶的是?) – 但我不知道如何。 这是一个类的例子 public class MyValueType implements Serializable { private final int value; private transient int derivedValue; public MyValueType(int value) { this.value = value; this.derivedValue = derivedValue(value); } // getters etc… } 鉴于该类没有arg构造函数,它怎么能被实例化,最终的字段集? (另外 – 我注意到这个类,特别是因为IDEA没有为这个类生成一个“no serialVersionUID”检查警告,但是成功地为其他类我已经可序列化的警告。)
我想序列化本地对象到JSON,但MSDN文档总是似乎混淆了我。 我相信我想使用DataContractJsonSerializer,但不完全确定,因为我看到了混合的反应。 我也有人推荐牛顿软件。 有没有人有这方面的经验,可以指出我在正确的方向吗?