C# 放大值类型的DataContract代理
我想在DataContract类中使用一个定制的APLIFED类型(可以为null)。 我试图编写一个C# 放大值类型的DataContract代理,c#,.net,functional-programming,datacontractserializer,datacontract,C#,.net,Functional Programming,Datacontractserializer,Datacontract,我想在DataContract类中使用一个定制的APLIFED类型(可以为null)。 我试图编写一个IDataContractSurrogate,但反序列化失败 我的放大类型如下所示: public struct Amplified<TValue> { public TValue Value { get; set; } //... some special code ... } [DataContract] public class MyDTO { [D
IDataContractSurrogate
,但反序列化失败
我的放大类型如下所示:
public struct Amplified<TValue>
{
public TValue Value { get; set; }
//... some special code ...
}
[DataContract] public class MyDTO
{
[DataMember] public Amplified<string> SpecialString { get; set; }
}
公共结构
{
公共TValue值{get;set;}
//…一些特殊代码。。。
}
数据合同可能如下所示:
public struct Amplified<TValue>
{
public TValue Value { get; set; }
//... some special code ...
}
[DataContract] public class MyDTO
{
[DataMember] public Amplified<string> SpecialString { get; set; }
}
[DataContract]公共类MyDTO
{
[DataMember]公共字符串{get;set;}
}
上面的代码可以工作,但会产生不必要的嵌套,其值属性为放大类型。我希望DataContract将Amplified表示为导线上的普通字符串
对于DataContract序列化程序(JSON和Xml),这可能吗?
为什么在使用IDataContractSurrogate以字符串替换Amplified时会出现InvalidCastException?您不能将代理项用于基本类型(即,当T是基本类型时,您可以从
Amplified
转换为T
,但不能转换为其他方向)。对于一个可能的替代方案,请查看“原语序列化格式的细粒度控制”一节。另一个信息:代理项强制转换异常发生在一个放大的Guid.Thx中。这解释了很多。到目前为止,我们通过使用另一个序列化程序(Json.Net)解决了这个问题。@Carlosfigueira感谢您帮助我回答了我的部分问题,但如果您对此有更多的insite,我们将不胜感激