我有以下业务对象
public class Employee
{
[JsonProperty("first_name")]
public string FirstName { get; set; }
public string Lastname { get; set; }
public DateTime DateOfBirth { get; set; }
public uint Salary { get; set; }
}
我有以下用于 json 序列化的接口和实现
interface IJSONSerializer<T>
{
string Serialize(T obj);
}
class NewtonJsonSerialization<T> : IJSONSerializer<T>
{
public string Serialize(T obj)
{
return JsonConvert.SerializeObject(obj, Formatting.Indented);
}
}
这是我的客户代码
var Employee = new Employee();
Employee.FirstName = "Ihor";
Employee.Lastname = "fff";
IJSONSerializer<Employee> serailizer = new NewtonJsonSerialization<Employee>();
var result = serailizer.Serialize(Employee);
这里我不喜欢的是,员工知道它将使用特定的库进行序列化(因为JsonProperty属性)。因此,如果我决定使用另一个json序列化程序或编写自己的,我将需要遍历所有业务对象并修改它们。有可能使我的业务对象序列化变得无知吗?如果是,如何
XML序列化和XmlSerializer类也是一样的:我需要用一些属性标记业务对象中的属性
有一个术语叫“持久性无知”,意思是业务对象不知道持久性。序列化也是这样吗?
除非您需要序列化的键/元素名称与C#类中定义的不同,否则您根本不应该担心属性。JSON和XML都工作得很好,不需要用特定于序列化的属性来修饰类属性。
如果在序列化数据中确实需要自定义键/元素名称,那么必须用多个属性修饰类属性。任何序列化程序都将读取相关属性并忽略其余属性。
public class Person
{
[JsonProperty("first_name")]
[XmlElement("first_name")]
public string FirstName { get; set; }
}
呼叫代码
ISerializer<Person> serializer;
string result;
var person = new Person { FirstName = "Nikhil" };
serializer = new NewtonsoftJsonSerializer<Person>();
result = serializer.Serialize(person);
/* Output
{"first_name":"Nikhil"}
*/
serializer = new BuiltInXmlSerializer<Person>();
result = serializer.Serialize(person);
/* Output
<Person
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<first_name>Nikhil</first_name>
</Person>
*/
编辑:
根据@ Michael Nero ,< code > data contract 和< code>DataMember属性将在大多数情况下起作用,但不是所有情况。这个列表中的第一个例外是。NET的内置< code>XmlSerializer在没有自定义元素名称的< code>XmlElement属性的情况下无法工作。
大多数序列化程序利用。Net的DataContract属性。Json.net也一样。试用这个示例,并确保在MSDN上查找DataMember的文档,以了解如何影响序列化。
null 但是,当我以Yar-Client模式提交Spark应用程序时,抛出了以下异常: 线程“main”org.apache.spark.sparkException:Task not serializable at org.apache.spark.util.closureCleaner$.ensureRecleaner.ccala:166)at org.apache.spark.util.c
我有一个webfluxendpoint,它返回一个项目数组。我试图让它将对象名添加到由@JsonRootName指定的数组中的每个项中。我曾经尝试过使用Jackson2ObjectMaper这样配置对象映射器。我正在使用SpringBoot 2.4.4。 我的endpoint如下所示: Json的回应是: 预期输出: 然而,当我的对象被@JsonRootName注释时,我没有得到根对象 欢迎提出任
问题内容: 我有一个问题。我想使用JAXB将一个对象转换为另一个对象。就像在中,我有一个class 和另一个class ,它们都有相同的参数,实际上都是相同的(复制粘贴),但是包不同。我想使用进行它们之间的转换。 怎么做,请帮帮我。 问题答案: 您可以执行以下操作。 注意: 不需要利用JAXBSource将数据具体化为XML。 它在对象模型上不需要任何注释。 com.home.Student co
嗨,我有LogEventObject在客户端用于记录事件,我想使用REST API将其发送到服务器。我将LogEventObject转换为json字符串,并通过REST将其作为有效载荷发送。在服务器端,我使用Groovy,当我尝试做对象apper.read值()时,我得到以下错误。 com.fasterxml.jackson.databind.JsonMappingExc0019:找不到非具体的集
(数据类)实体。JAVA (数据类)实体。JAVA 我试着说: 我犯了一个错误: 我已经把和我错过了什么?
问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放了类的变量和构造函数,但也有getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单: