标签: datacontract

我可以一起使用DataContract和Serializable吗?

我正在研究WCF服务.我的所有类都已使用[Serializable]属性进行序列化,但由于"k__BackingField"属性命名问题,我使用了DataContract和DataMember属性.我可以同时使用这两个属性,如下所示:

[Serializable]
[DataContract]
public class User
{

  [DataMember]
  public string Name { get; set; }

  [DataMember]
  public int UserID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它是否正确?

我也有类似的解决方案. C#自动对JSON进行反序列化

Serializable和DataContract(不是?)

wcf datacontract serializable

25
推荐指数
1
解决办法
2万
查看次数

DataContract序列化异常(不期望数据协定名称)

我有以下代码:

[DataContract]
class TestContract {
    private String _Name;
    private Int32 _Age;

    [DataMember( Name = "Name" )]
    public String Name {
        get { return _Name; }
        set { _Name = value; }
    }

    [DataMember( Name = "Age" )]
    public Int32 Age {
        get { return _Age; }
        set { _Age = value; }
    }
}

[Serializable]
public class DNCJsonDictionary<K, V> : ISerializable {
    Dictionary<K, V> dict = new Dictionary<K, V>();

    public DNCJsonDictionary() { }

    protected DNCJsonDictionary( SerializationInfo info, StreamingContext context ) …
Run Code Online (Sandbox Code Playgroud)

c# reflection serialization datacontract

24
推荐指数
1
解决办法
2万
查看次数

将WCF与抽象类一起使用

如何在WCF中为抽象类定义DataContract?

我有一个类"人",我使用WCF成功通信.现在我添加一个从Person引用的新类"Foo".一切都还不错.但是当我将Foo抽象化并定义一个子类时,它就失败了.它在服务器端使用CommunicationException失败,但这并没有真正告诉我太多.

我的简化课程用于测试:

[DataContract]
public class Person
{
    public Person()
    {
        SomeFoo = new Bar { Id = 7, BaseText = "base", SubText = "sub" };
    }

    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public Foo SomeFoo { get; set; }
}

[DataContract]
public abstract class Foo
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string BaseText { get; set; }
}

[DataContract]
public class Bar : Foo
{
    [DataMember]
    public string SubText { get; …
Run Code Online (Sandbox Code Playgroud)

.net wcf abstract-class datacontract

21
推荐指数
1
解决办法
9681
查看次数

通过WCF传递匿名类型的实例

我有一个WCF服务方法,它期望一个对象,然后使用反射检索其属性.

在客户端,我创建了一个匿名类型对象

var obj = new {FirstName="John", LastName="Doe"}
Run Code Online (Sandbox Code Playgroud)

并将其传递给方法.我得到一个例外:

Type '<>f__AnonymousType0`2[System.String,System.String]' cannot be serialized. 
Consider marking it with the DataContractAttribute attribute, and marking all 
of its members you want serialized with the DataMemberAttribute attribute.  
See the Microsoft .NET Framework documentation for other supported types.
Run Code Online (Sandbox Code Playgroud)

我无法使用序列化属性标记类型或其成员,因为实际上没有明确声明的类型或属性.有没有办法克服这个问题?

wcf anonymous-types datacontract datacontractserializer

20
推荐指数
2
解决办法
7704
查看次数

在WCF中命名通用DataContracts

我使用通用类作为响应数据合同.一切都很好,这大大简化了我的WCF服务的设计.

每个请求都有一个带有以下签名的标准响应对象:

  • 状态(枚举)
  • 消息(字符串)
  • 结果(T)

以下是响应类:

[DataContract]
    public class Response<T>
    {
        public Response() {}

        public Response(T result)
        {
            this.result = result;
            if (result != null)
            {
                this.status = Status.StatusEnum.Success;
            }
            else
            {
                this.status = Status.StatusEnum.Warning;
            }
        }

        public Response(T result, Status.StatusEnum status)
        {
            this.status = status;
            this.message = message;
        }

        public Response(T result, Status.StatusEnum status, string message)
        {
            this.status = status;
            this.message = message;
            this.result = result;
        }

        [DataMember]
        public Status.StatusEnum status { get; set; }

        [DataMember]
        public string message …
Run Code Online (Sandbox Code Playgroud)

wcf naming dynamic datacontract

19
推荐指数
1
解决办法
8747
查看次数

多个WCF服务引用相同的数据协定

我正在构建一组共享公共数据合同(或者您喜欢的实体)的WCF服务.这些是使用DataContract和DataMember属性修饰的简单数据传输对象.我明确指定了名称和命名空间.在尝试遵循IDesign建议平均每个服务合同12个成员的原则时,我将我的服务项目分解为多个服务.

我的数据合同是在一个单独的程序集中,如果他们使用.Net,我可以提供给我们的客户.他们可以告诉他们的服务引用在引用的程序集中重用类型.但是,如果他们不使用.net并且他们使用两个使用相同实体的服务,那么他们将会得到一个含糊不清的参考消息.如果我没有引用数据协定dll,我可以在Visual Studio中看到这个.

我的问题是,我可以在我的服务中做些什么,或者他们可以在客户端应用程序中做什么来解决数据合同来自哪个代理?

service wcf datacontract reusability

19
推荐指数
2
解决办法
2万
查看次数

通常接受的方法来避免每个派生类的KnownType属性

是否有一种普遍接受的方法来避免在WCF服务上使用KnownType属性?我一直在做一些研究,看起来有两种选择:

  1. 数据合同解析器
  2. NetDataContractSerializer

我不是每次添加新类型时都必须静态添加KnownType属性的忠实粉丝,因此我想避免它.

是否应该使用第三种选择?如果是这样,它是什么?如果没有,上述两种选择中的哪一种是正确的选择?

编辑 - 使用方法

第三种选择是使用反射

[DataContract]
[KnownType("DerivedTypes")]
public abstract class FooBase
{
    private static Type[] DerivedTypes()
    {
        return typeof(FooBase).GetDerivedTypes(Assembly.GetExecutingAssembly()).ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# wcf datacontract known-types

19
推荐指数
2
解决办法
7589
查看次数

具有只读属性的WCF DataContract

我正在尝试从WCF中的服务方法返回一个复杂类型.我正在使用C#和.NET 4.这种复杂类型意味着不变(与.net字符串相同).此外,服务只返回它,并且从不接收它作为参数.

如果我尝试仅在属性上定义getter,则会出现运行时错误.我想这是因为没有setter导致序列化失败.不过,我认为这种类型应该是不变的.

例:

[DataContract]
class A 
{
   [DataMember]
   int ReadOnlyProperty {get; private set;}
}
Run Code Online (Sandbox Code Playgroud)

由于序列化问题,服务无法加载.

有没有办法在WCF DataContract上创建只读属性?也许通过更换序列化器?如果是这样,怎么样?如果没有,你会对这个问题提出什么建议?

谢谢,
阿萨夫

.net wcf .net-4.0 datacontract

18
推荐指数
3
解决办法
2万
查看次数

DataContract,默认DataMember值

有没有办法在反序列化期间选择不在xml文件中的属性的默认值?
如果mAgexml文件中没有该属性,我想使用默认值18.是否可以?

[DataContract]
public class Person 
{
    public Person ()
    {
    }
    [DataMember(Name = "Name")]
    public string mName { get; set; }
    [DataMember(Name = "Age")]
    public int mAge { get; set; }
    [DataMember(Name = "Single")]
    public bool mIsSingle { get; set; }
};
Run Code Online (Sandbox Code Playgroud)

编辑以回答.

[DataContract]
public class Person 
{
    public Person ()
    {
    }
    [DataMember(Name = "Name")]
    public string mName { get; set; }
    [DataMember(Name = "Age")]
    public int? mAge { get; set; }
    [DataMember(Name = "Single")]
    public …
Run Code Online (Sandbox Code Playgroud)

c# wcf datacontract datamember

17
推荐指数
2
解决办法
2万
查看次数

如何组织和命名在WCF Web服务中用作数据协定的DTO

我们在WCF Web服务中使用DTO作为数据契约.这些DTO的目的是仅公开与特定API方法相关的信息.

我要求你们提供一些关于最佳实践的建议.

例如,考虑以下简单模型:

class Order
{
    int CreatedBy { get; set; }
    DateTime CreatedOn { get; set; }
    string Description { get; set; }
    int Id { get; set; }
    string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

假设我们的API允许消费者创建,更新获取订单,我们创建了以下DTO.为简单起见,删除了DataMember和DataContract属性.

创建方法:用户无法指定IdCreatedOn属性,因此DTO如下所示:

class CreateOrderData
{
    int CreatedBy { get; set; }
    string Description { get; set; }
    string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

更新方法:用户无法指定Id,CreatedOnCreatedBy …

c# wcf datacontract dto

17
推荐指数
1
解决办法
2857
查看次数