序列化不包含属性名的对象

本文关键字:对象 属性 包含 序列化 | 更新日期: 2023-09-27 18:03:01

我有一个简单对象:

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

当我通过web服务序列化它时,我得到

[
  {"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结果映射到我的对象

序列化不包含属性名的对象

如果不编写自己的序列化器来序列化属性哈希以外的东西,则不可能做到这一点。哈希是键值字段的序列,因此每个字段必须有唯一的键。

如果为每个键尝试空白值,如:

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

那么你真正拥有的只是:

{"": "coconut"}

,因为每个键都会覆盖它前面的键。

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

你可以为所有成员指定这个属性:[DataMember(Name =" REMOVEME")]然后将其替换为空字符串:)

如果你能保证MyClassNo总是不同,那么你可以返回一个Dictionary<int, string>,而不是如果一个List<MyClass>可能更符合你所追求的。