序列化对象而不包含属性名称

时间:2011-07-22 11:07:51

标签: c# .net wcf serialization

我有一个简单的对象:

[DataContract]
public class MyClass
{
    [DataMember(Name = "MyClassNo")]
    public int MyClassNo { get; set; }
    [DataMember(Name = "MyName")]
    public string MyName { get; set; }
 }

当我通过我的网络服务序列化时,我得到了

[
  {"MyClassNo": 1, "MyName": "Test1"},
  {"MyClassNo": 2, "MyName": "Test2"}
]

但我想要的是没有包含属性名称的数据:

[
  {1, "Test1"},
  {2, "Test2"}
]

我如何实现这一目标?

*编辑 - 我用来序列化的代码是:

var myObj = MyOpenSQlConnection.Query<MyClass>(@"select MyClassNo, MyName from MyTable");
return myObj.ToList<MyClass>();

请注意,我正在使用Dapper-dot-net将sql结果映射到我的对象

3 个答案:

答案 0 :(得分:0)

您可以为所有成员指定此属性:[DataMember(Name =“REMOVE”)] 然后用空字符串替换它:)

答案 1 :(得分:0)

如果不编写自己的序列化程序,将序列化为属性哈希以外的其他内容,则无法执行此操作。散列是键值字段的序列,因此每个字段必须具有唯一的键。

如果您为每个键尝试了空白值,请执行以下操作:

{"": "apple", "": "banana", "": "coconut"}

那么你真正拥有的只是:

{"": "coconut"}

因为每个密钥都会覆盖它之前的密钥。

更好的问题可能是,“为什么要在没有属性名称的情况下进行序列化?”特别是在基于Web的环境中,您将需要知道哪个值对应于哪个字段。

答案 2 :(得分:0)

如果您可以保证MyClassNo 始终不同,那么您可以返回Dictionary<int, string>,如果List<MyClass>可能更符合什么你在追求。