序列化不包含属性名的对象
本文关键字:对象 属性 包含 序列化 | 更新日期: 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>
可能更符合你所追求的。