用@dataclasses和@dataclasses_json做嵌套类型的序列化和反序列化,并定义属性的对外映射字段

from dataclasses import dataclass,field
from dataclasses_json import dataclass_json, config, LetterCase

@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass
class Address:
    street: str = field(default_factory=list,metadata=config(field_name="streetAddress"))
    city: str=''
    state: str=''

@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass
class Person:
    name: str=''
    age: int=''
    addresses: List[Address] = field(default_factory=list,metadata=config(field_name="xxx"))

# 示例数据
example_person = Person(name="John Doe", age=30, addresses=[Address(street="123 Main St", city="Anytown", state="CA")])


data = {
    "name": "John Doe",
    "age": 30,
    "xxx": [
        {"streetAddress": "123 Main St", "city": "Anytown", "state": "CA"},
        {"streetAddress": "456 Elm St", "city": "Othertown", "state": "NY"}
    ]
}

# 反序列化
deserialized_person = Person.from_json(json.dumps(data))
print(deserialized_person)
# 序列化
serialized_person = Person()
serialized_person = serialized_person.to_json(indent=4)
print(serialized_person)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows桌面应用程序的C++类库。在MFC中,序列化(Serialization)是指将对象的状态转换为可以存储或传输的格式,而反序列化(Deserialization)则是将存储或传输的数据恢复为对象的状态。 MFC提供了一些类和宏来支持序列化反序列化操作,主要涉及以下几个类: 1. CObject类:所有支持序列化的MFC类都继承自CObject类。它提供了一些虚拟函数,如Serialize用于实现对象的序列化反序列化操作。 2. CArchive类:用于创建和操作存储或传输数据的存档文件。CArchive类提供了Serialize函数,用于将对象的状态写入存档文件或从存档文件中读取对象的状态。 3. CFile类:用于对文件进行读写操作。它提供了Open、Read、Write等函数来操作文件。CArchive类可以使用CFile类来读写数据。 下面是一个简单的示例代码,演示了如何在MFC中进行序列化反序列化操作: ```cpp // 假设有一个自定义的类MyData,需要支持序列化反序列化 class MyData : public CObject { public: int m_value; // 实现Serialize函数来进行对象的序列化反序列化操作 void Serialize(CArchive& ar) { if (ar.IsStoring()) // 写入数据 ar << m_value; else // 读取数据 ar >> m_value; } }; // 序列化操作 void SerializeData() { CFile file(_T("data.dat"), CFile::modeCreate | CFile::modeWrite); CArchive ar(&file, CArchive::store); MyData data; data.m_value = 42; data.Serialize(ar); // 将对象的状态写入存档文件 ar.Close(); file.Close(); } // 反序列化操作 void DeserializeData() { CFile file(_T("data.dat"), CFile::modeRead); CArchive ar(&file, CArchive::load); MyData data; data.Serialize(ar); // 从存档文件中读取对象的状态 ar.Close(); file.Close(); // 使用反序列化后的对象... int value = data.m_value; } ``` 在上述示例中,Serialize函数根据ar对象的状态进行读写操作,将m_value成员变量的值进行序列化反序列化。通过创建CFile和CArchive对象,可以实现对存档文件的读写操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值