Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 放大值类型的DataContract代理_C#_.net_Functional Programming_Datacontractserializer_Datacontract - Fatal编程技术网

C# 放大值类型的DataContract代理

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

我想在DataContract类中使用一个定制的APLIFED类型(可以为null)。 我试图编写一个
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,我们将不胜感激