C# 无法将我的类序列化为所需的json文件
我使用Newtonsoft.Json库进行反序列化和序列化。我试图将一个C#类序列化为json,我已经将许多类序列化为json,但我从未遇到过这样的json文件。问题在于第一个“text”属性后面没有一个开括号,而且“platform”属性在fulfillmentMessage中重复(已经存在) 我的班级:C# 无法将我的类序列化为所需的json文件,c#,json.net,actions-on-google,C#,Json.net,Actions On Google,我使用Newtonsoft.Json库进行反序列化和序列化。我试图将一个C#类序列化为json,我已经将许多类序列化为json,但我从未遇到过这样的json文件。问题在于第一个“text”属性后面没有一个开括号,而且“platform”属性在fulfillmentMessage中重复(已经存在) 我的班级: public class Fulfillmentmessage { public string platform { get; set; }
public class Fulfillmentmessage
{
public string platform { get; set; }
[JsonProperty("simpleResponses ", NullValueHandling = NullValueHandling.Ignore)]
public Simpleresponses simpleResponses { get; set; }
[JsonProperty("basicCard", NullValueHandling = NullValueHandling.Ignore)]
public Basiccard basicCard { get; set; }
}
public class Simpleresponses
{
public Simplerespons[] simpleResponses { get; set; }
}
public class Simplerespons
{
public string textToSpeech { get; set; }
}
public class Texts
{
public Text text { get; set; }
}
public class Text
{
public List<string> text { get; set; }
}
public class Basiccard
{
public string title { get; set; }
public string subtitle { get; set; }
public string formattedText { get; set; }
public Image image { get; set; }
public Button[] buttons { get; set; }
}
public class Image
{
public string imageUri { get; set; }
public string accessibilityText { get; set; }
}
public class Button
{
public string title { get; set; }
public Openuriaction openUriAction { get; set; }
}
public class Openuriaction
{
public string uri { get; set; }
}
实际结果:
{
"fulfillmentMessages": [
{
"platform": "ACTIONS_ON_GOOGLE",
"simpleResponses": {
"simpleResponses": [
{
"textToSpeech": "Test fulfillment Text"
}
]
},
"text": {
"text": [
"Test fulfillment Text"
]
},
"basicCard": {
"title": "Test Title",
"subtitle": "Test subtitle",
"formattedText": "Test Discription",
"image": {
"imageUri": "https://www.eg.com",
"accessibilityText": "Test"
},
"buttons": [
{
"title": "Test weblink",
"openUriAction": {
"uri":"https://www.eg.com"
}
}
]
}
}
]
}
我假设您有一个父/根类,您在其中声明如下内容-
public class Root
{
List<Fulfillmentmessage> fulfillmentMessages {get; set;}
}
var root = new Root();
root.fulfillmentMessages = new List<Fulfillmentmessage>();
root.fulfillmentMessages.Add(new Fulfillmentmessage()); // <- Simple response
root.fulfillmentMessages.Add(new Fulfillmentmessage()); // <- Basic Card
对于根目录
类-
public class Fulfillmentmessage
{
public string platform { get; set; }
public Simpleresponses simpleResponses { get; set; }
//public Text text { get; set; } <- No Text property here
public string platform2 { get; set; }
public Basiccard basicCard { get; set; }
}
public class Root
{
List<object> fulfillmentMessages {get; set;} // Replaced Fulfillmentmessage with object
}
公共类根目录
{
List fulfillmentMessages{get;set;}//已将Fulfillmentmessage替换为object
}
然后创建这样的对象-
var root = new Root();
root.fulfillmentMessages = new List<Fulfillmentmessage>();
root.fulfillmentMessages.Add(new Fulfillmentmessage()); // <- Simple response
root.fulfillmentMessages.Add(new Text()); // <- Text
root.fulfillmentMessages.Add(new Fulfillmentmessage()); // <- Basic Card
var root=新根();
root.fulfillmentMessages=新列表();
root.fulfillmentMessages.Add(新的Fulfillmentmessage());//显示您进行序列化的代码,第一眼就可以看到,没有任何与序列化相关的实际代码。这个问题的全部内容看起来像是fulfillmentMessages
的长度为1-一个列表或数组,包含一个元素。看起来我们还缺少一个根元素。我没有看到一个名为fulfillmentMessages
的属性类,但它在JSON.public类RootObject{public List fulfillmentMessages{get;set;}}中。是的,我没有添加根对象类,但实际上是@quaabaam点。关于List,我们是对的,这是表示fulfillmentMessages的JSON结构的技巧。此外,我还删除了Fulfillmentmessage类的platform2属性,并更正了我的C#类文本,以获得所需的输出。此外,还需要使用NullValueHandling.Ignore值,该值来自Newtonsoft库,用于避免输出null值。
var root = new Root();
root.fulfillmentMessages = new List<Fulfillmentmessage>();
root.fulfillmentMessages.Add(new Fulfillmentmessage()); // <- Simple response
root.fulfillmentMessages.Add(new Text()); // <- Text
root.fulfillmentMessages.Add(new Fulfillmentmessage()); // <- Basic Card