cuốn sách gpt4 ai đã làm

c# - 具有抽象(基)/具体(继承)类的 DataContractSerializer

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 22:24:03 27 4
mua khóa gpt4 Nike

Cho mã này

ghi đè công khai void Serialize(BaseContentObject obj)
{
tệp chuỗi = ObjectDataStoreFolder + obj.Slug + ".xml";
if(obj.GetType() == typeof(Page))
{
DataContractSerializer dcs = new DataContractSerializer(typeof Page));
XmlDictionaryWriter myWriter =
XmlDictionaryWriter.CreateTextWriter(FileStream mới(tệp, ileMode.CreateNew, FileAccess.Write),
Mã hóa.UTF8);
dcs.WriteObject(myWriter, obj);
myWriter.Close();
}
khác nếu(obj.GetType() == typeof(Image))
{
DataContractSerializer dcs = new DataContractSerializer(typeof Image));
...
...
}
}

Có cách nào để làm một cái gì đó như thế này

DataContractSerializer dcs = new DataContractSerializer(obj.GetType());
// tuy nhiên điều này không thành công, lỗi trình biên dịch

Và loại bỏ những câu lệnh if() ở trên? Hàm tạo của DataContractSerializer yêu cầu Loại hoặc Không gian tên, nhưng nó không hoạt động với obj.GetType().

Hệ thống phân cấp lớp của tôi như sau:

BaseContentClass(trừu tượng)

Trang (cụ thể là kế thừa BaseContentClass)

Hình ảnh (cụ thể, kế thừa BaseContentClass)

...

?

câu trả lời hay nhất

Nói cho serializer biết điều gì sẽ xảy ra:

[KnownType(typeof(Trang))]
[KnownType(typeof(Image))]
[Hợp đồng dữ liệu]
lớp trừu tượng công khai BaseContentObject { /* ... */ }

[Hợp đồng dữ liệu]
Lớp công khai Trang : BaseContentObject { /* ... */ }

[Hợp đồng dữ liệu]
lớp công khai Hình ảnh : BaseContentObject { /* ... */ }

然后您可以使用 DataContractSerializer mới(typeof(BaseContentObject )) Xử lý mọi thứ.

Về C# - DataContractSerializer với các lớp trừu tượng (cơ sở)/cụ thể (kế thừa), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/2056596/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress