2016-05-23 135 views
0

所以我从serializeobject电流输出为:如何在使用jsonconvert.serializeobject时将特定字段用作json对象的名称?

{ 
"ID": "dog-1", 
"fed": [ 
    "2016/05/19T01:00:00Z" 
] 
}, 

“ID”是对象的字符串我试图序列化,和“喂”是字符串列表。

我的问题是,我可以使用某种属性,使我得到这个呢?

"dog-1" : { 
"fed": [ 
    "2016/05/19T01:00:00Z" 
] 
}, 

我使用newtonsoft JsonConvert.SerializeObject

+0

ID是一个属性,然后你试图让该属性的值成为一个类来包含该类中其余的属性?你为什么要这样做? – Dispersia

+0

你为什么想这样做? – techspider

+0

我不想对另一个将读取JSON的应用程序进行更改,该应用程序期望它处于后一种格式 –

回答

0

简短的回答:不,你不能

你序列化一个对象,这就是,翻译它的结构为一个字符串,其描绘它的属性和价值。

但是,您可以确定想要获取序列化的结构,将对象从其原始结构迁移到您需要的结构,然后对其进行序列化。

在你的榜样,你有这似乎是这样一个对象:

class yourObject { 
    public string ID; 
    public Date fed; 
} 

但是你要序列的东西,给人的感觉更像是stablish字符串和日期之间的直接关系的字典。

也许你可以创建类似这样:

class yourOtherObject { 
    public Date fed; 
} 

而且在这样的方式加载原始对象:现在

yourObject originalData = new yourObject("dog-1", "2016/05/19T01:00:00Z"); 
yourOtherObject originalDataDate = new yourOtherObject(); 
originalDataDate.fed = originalData.fed; 
KeyValuePair<string, yourOtherObject> serializableData = new KeyValuePair<string, yourOtherObject>(originalData.ID, originalDataDate); 

,如果您序列serializableData,你应该获得你正在寻找的结果。只需将该想法封装到一个类中,创建特定的构造函数和方法即可将数据从yourObject传输到此类,并从此类传递给yourObject,您将能够获得翻译。

其他选项是添加一个方法,使特定的序列化到yourObject类,但这往往是长远来说更多的工作。

+0

谢谢,此评论帮助我找出了我发布的字典解决方案这个问题的答案 –

0

找到了一个可用的解决方案。

var x = new List<MyClass>(); 
JsonConvert.SerializeObject(x.ToDictionary(x => x.ID)); 

,这将创建的Json的列表,每个对象看起来像这样:

"dog" : { 
    "myList" : [ 
     "mystring", 
     "mysecondstring" 
    ] 
} 

随着对象的列表,看起来像这样:

object.ID == "dog" 
object.myList == ["mystring", "mysecondstring"] //is a List<string> 
相关问题