Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将我的类序列化为所需的json文件_C#_Json.net_Actions On Google - Fatal编程技术网

C# 无法将我的类序列化为所需的json文件

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; }

我使用Newtonsoft.Json库进行反序列化和序列化。我试图将一个C#类序列化为json,我已经将许多类序列化为json,但我从未遇到过这样的json文件。问题在于第一个“text”属性后面没有一个开括号,而且“platform”属性在fulfillmentMessage中重复(已经存在)

我的班级:

    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