如何提供将我的课程转换为其他类型的支持?例如,如果我有自己的管理a的实现byte[],并且我想让人们将我的类转换为a byte[],这将只返回私有成员,我该怎么做?
通常的做法是让他们也将它转换为字符串,还是应该覆盖ToString()(或两者)?
我有一些要反序列化的json。将序列反序列化很容易,但是我正在使用接口,这就是我需要反序列化的结果:
因此,让我们从一些JSON开始:
[{"TimeGenerated":"2017-05-30T19:21:06.5331472+10:00","OuterValue":1.08,"Identifier":{"IdentifierName":"BLA","IdentifierNumber":1},"Locale":{"LocaleName":"LOCALE NAME","LocaleType":1,"LocaleNumber":1,"StartTime":"2017-05-30T19:20:00+10:00"},"InnerValue":1.08,"InnerType":0,"InnerId":"InnerI","Type":"MyType","Id":"11111"}]Run Code Online (Sandbox Code Playgroud)
这是在服务器端进行序列化的数据(当然没有问题),其对象类型为:
IList<IRootObject>
Run Code Online (Sandbox Code Playgroud)
如此有效,我想反序列化为:
IList<IRootObject> MyDeserialisedObject = JsonConvert.Deserialise<IList<IRootObject>>(JsonString);
Run Code Online (Sandbox Code Playgroud)
显然,这里的泡菜是以下的旧界面/抽象类型错误:
'Could not create an instance of type BLA. Type is an interface or abstract class and cannot be instantiated'
Run Code Online (Sandbox Code Playgroud)
很好,我创建了一些自定义转换器,并进行了如下装饰:
类是:
[JsonObject(MemberSerialization.OptIn)]
public class Identifier
{
[JsonProperty]
public string IdentifierName { get; set; }
[JsonProperty]
public int IdentifierNumber { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class Locale
{
[JsonProperty]
public string LocaleName { get; set; }
[JsonProperty]
public int LocaleType { get; set; }
[JsonProperty]
public int LocaleNumber …Run Code Online (Sandbox Code Playgroud) 我有一个基类,它有一个方法调用AddFruit,它接受一个类的Fruit类并以一般方式处理它.
public abstract class Foo
{
protected List<ProcessedFruit> processedFruit = new List<ProcessedFruit>();
public void AddFruit(Fruit o)
{
// Process fruit
processedFruit.Add(o);
}
public void Update()
{
// Do base class specific stuff here
OnUpdate();
}
protected abstract void OnUpdate();
}
public class AppleBar : Foo
{
public AppleBar()
:base(){}
protected override void OnUpdate() { }
}
public class BananaBar : Foo
{
public BananaBar()
:base(){}
protected override void OnUpdate() { }
}
Run Code Online (Sandbox Code Playgroud)
任何派生的类都Foo以非一般方式更新,并ProcessedFruit …
这可能是重复的。但经过一天的研究,我希望得到你的宽大处理。这是一个关于协方差的问题。
为什么我可以做到这一点?
List<Animal> allAnimals = new List<Animal>();
allAnimals.Add(new Dog());
allAnimals.Add(new Cat());
Run Code Online (Sandbox Code Playgroud)
但不能这样做吗?
List<Dog> aBunchOfDogs = new List<Dog>();
allAnimals = aBunchOfDogs;
Run Code Online (Sandbox Code Playgroud)
我读过一些关于协方差的讨论。
我的理解是,我不能将狗列表添加到动物列表中,因为这样我可以将猫添加到动物列表中,这将是危险的。但是将猫或狗的单个实例添加到动物列表中也同样危险,不是吗?在我看来,C# 还没有决定是否信任我。