Этот код (C# DotNet 1.0 вперед) работает вполне хорошо для сериализации большинства объектов к XML. (и назад), Это не работает на объекты, содержащие ArrayLists, и если возможная палка к использованию только Массивов
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public static string Serialize(object objectToSerialize)
{
MemoryStream mem = new MemoryStream();
XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());
}
public static object Deserialize(Type typeToDeserialize, string xmlString)
{
byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);
XmlSerializer ser = new XmlSerializer(typeToDeserialize);
return ser.Deserialize(mem);
}
Обычно есть 2 способа добиться этого.
Option1 : Добавьте еще один параметр в IGarrage
, представляющий T
, который следует передать в ограничение IGenericCar
:
interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }
Option2 : Определите базовый интерфейс для IGenericCar
, который не является универсальным и ограничивает этот интерфейс
interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }
Имеет ли смысл делать что-то вроде:
interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType >
where TCar: IGenericCar< TCarType > {...}