标签: datacontract

[DataContract]的命名空间

我找不到要用于[DataContract][DataMember]元素的命名空间.根据我发现的,似乎添加以下内容应该足够了,但在我的情况下它不是.

using System;
using System.Runtime.Serialization;
Run Code Online (Sandbox Code Playgroud)

这是我的代码片段:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

    [DataContract]
    public class Tuple<T1, T2> {
            // A custom implementation of a Tuple
            //...
            //...
        }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

找不到类型或命名空间名称'DataContract'(您是否缺少using指令或程序集引用?)

我没有使用正确的命名空间吗?

c# wcf datacontract

229
推荐指数
4
解决办法
20万
查看次数

何时使用DataContract和DataMember属性?

DataContract对WCF中的属性非常困惑.据我所知,它用于序列化类似用户定义的类型.我写了一个类,这个类在客户端公开.

[DataContract]
public class Contact
{
    [DataMember]
    public int Roll { get; set; }

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

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

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

它工作正常,但是当我删除DataContract并且DataMember它也工作正常.我无法理解为什么它正常工作.谁能告诉我实际用途是DataContract什么?

我的服务合同是这样的

[ServiceContract]    
public interface IRestServiceImpl
{
    [OperationContract]        
    Contact XmlData(string id);      
}
Run Code Online (Sandbox Code Playgroud)

wcf datacontract datamember datacontractserializer

171
推荐指数
3
解决办法
12万
查看次数

WCF:没有设置公开只读DataMember属性?

我有一个服务器端类,我通过[DataContract]在客户端提供.这个类有一个readonly字段,我想通过一个属性提供.但是,我无法这样做,因为似乎我不允许在没有get和set的情况下添加[DataMember]属性.

那么 - 有没有一种方法可以在没有setter的情况下拥有[DataMember]属性?

[DataContract]
class SomeClass
{
    private readonly int _id; 

    public SomeClass() { .. }

    [DataMember]
    public int Id { get { return _id; } }        

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

或将溶液中使用[数据成员]作为字段- (例如像显示在这里)?尝试这样做,但它似乎并不关心该领域是readonly ..?

编辑:这是通过黑客攻击这样做的唯一方法来制作一个只读属性吗?(不 - 我不想这样做......)

[DataMember]
public int Id
{
    get { return _id; }
    private set { /* NOOP */ }
}
Run Code Online (Sandbox Code Playgroud)

.net wcf readonly datacontract datamember

59
推荐指数
4
解决办法
4万
查看次数

数据契约中的IsReference属性

IsReference物业的目的是DataContract什么?请求和响应如何随应用此属性而变化?

wcf datacontract

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

将枚举序列化为字符串

我有一个枚举:

public enum Action {
    Remove=1,
    Add=2
}
Run Code Online (Sandbox Code Playgroud)

一节课:

[DataContract]
public class Container {
    [DataMember]
    public Action Action {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

当将Container的实例序列化为json时,我得到:( {Action:1}如果Action被删除).

我想得到:( {Action:Remove}而不是int我需要ToString形式的枚举)

我可以在不增加其他成员的情况下这样做吗?

c# json datacontract

47
推荐指数
4
解决办法
4万
查看次数

便携式类库:推荐替代[Serializable]

我正在将.NET Framework C#类库移植到可移植类库.一个反复出现的问题是如何处理使用该[Serializable]属性修饰的类,因为此属性不是可移植类库子集的一部分.相反,可移植类库子集中的序列化功能似乎由DataContractAttribute覆盖.

  • 为了在可移植类库中保留尽可能多的功能,[Serializable][DataContract]属性替换就足够了(暗示所有需要序列化的字段和属性也需要进行修饰[DataMember])?
  • 什么(如果有的话)我无法用这种方法做我可以做的[Serializable]应用?
  • 是否有一种侵入性较小的方法?

鉴于[DataContract][DataMember]使用,我正在考虑改变代码沿着以下行.这种方法有明显的缺陷吗?有没有办法制定同样的东西,而不是那么冗长?

#if PORTABLE
    [DataContract]
#else
    [Serializable]
#endif
    public class SerializableClass : SerializableBaseClass
    {
       ...
#if !PORTABLE
        protected SerializableClass(SerializationInfo info, StreamingContext context)
             : base(info, context)
        {
        }
#endif
        ...
#if PORTABLE
        [DataMember]
#endif
        private Type1 _serializableField;

#if PORTABLE
        [DataMember]
#endif
        private Type2 SerializableProperty { get; set; }

        ...
    }
Run Code Online (Sandbox Code Playgroud)

c# serialization datacontract serializable portable-class-library

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

DataContract XML序列化和XML属性

是否可以将此XML反序列化为标记为DataContract属性的对象?

<root>
<distance units="m">1000</distance>
</root>
Run Code Online (Sandbox Code Playgroud)

您可能会看到有"单位"属性.我不相信这是支持的.还是我错了?

c# xml wcf serialization datacontract

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

配置JSON.NET以忽略DataContract/DataMember属性

我们在使用Microsoft JSON序列化程序和JSON.NET的MVC3项目中遇到了这种情况.

每个人都知道DateTime在Microsoft的序列化程序中基本上被打破了,所以我们切换到JSON.NET来避免这个问题.这很好用,除了我们尝试序列化的一些类是具有DataContract/DataMember属性的POCO.它们在多个位置引用的程序集中定义.此外,它们还具有一些其他显示属性,这些属性未标记为DataMembers以提高效率.例如,客户

[DataContract]
public class Customer
{
   [DataMember]
   public string FirstName { get; set;}
   [DataMember]
   public string LastName { get; set;}
   public string FullName 
   {
       get
       {  return FirstName + " " + LastName; }
   }

}
Run Code Online (Sandbox Code Playgroud)

当这个客户通过WCF传递时,客户端可以引用该程序集并使用FullName就好了,但是当使用JSON.NET序列化时,它会看到FullName不是a [DataMember]并且不会序列化它.是否可以选择传递给JSON.NET,告诉它忽略类已[DataContract]应用属性的事实?

注意: 在.NET中使用JavaScriptSerializer可以很好地处理FullName属性,但DateTimes会被破坏.我需要JSON.NET忽略这个类具有DataContract/DataMember属性的事实,并且只是执行标准的公共字段序列化,就像它们不在那里一样.

c# json datacontract datamember json.net

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

为什么不建议使用[DataMember(EmitDefaultValue = false)]?

在WCF中,您可以使用[DataContract][DataMember]属性定义合同,如下所示:

[DataContract]
public class Sample 
{
    [DataMember(EmitDefaultValue = false, IsRequired = false)]
    public string Test { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

MSDN上的这篇文章指出EmitDefaultValue = false不建议使用:

片段

但是,我喜欢使用它,因为使用这种结构生成的XML更清晰.未指定此设置会导致:

<Sample>
    <Test xsi:nil="true"/>
</Sample>
Run Code Online (Sandbox Code Playgroud)

使用设置时,如果没有值,则省略元素:

<Sample>
</Sample>
Run Code Online (Sandbox Code Playgroud)

我很好奇这个陈述背后的原因是什么.特别是因为XML的两个snipptes看起来都等同于我(并且最后一部分可以为此契约正确地反序列化).

这句话背后的原因是什么?

wcf msdn datacontract datamember

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

从XSD生成DataContract

我希望能够DataContract从XSD文件生成一个,最好使用xsd.exe工具.什么是自动生成[DataContract][DataMember]我的每个项目最简单的方法?

还是有更好的方法?我试图避免每次更改和重新生成XSD文件时重新创建数据协定.

.net wcf xsd datacontract

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