Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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/json/15.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_Datacontractjsonserializer - Fatal编程技术网

C# 以正确的格式生成Json

C# 以正确的格式生成Json,c#,json,datacontractjsonserializer,C#,Json,Datacontractjsonserializer,我正在尝试生成以下Json { "retailer": "The retailer", "sites": [{ "id": "1234", "Sitename": "Microsoft", "website": "www.microsoft.com" }], "Products": [{ "Name": "Visual Studio", "Year": "2017" }] }

我正在尝试生成以下Json

{
    "retailer": "The retailer",
    "sites": [{
        "id": "1234",
        "Sitename": "Microsoft",
        "website": "www.microsoft.com"
    }],
    "Products": [{
        "Name": "Visual Studio",
        "Year": "2017"
    }]
}
站点(数组,但我使用了列表)。 产品(阵列,但我使用了列表)

我的代码(不生成上述Json)

<代码>父PAR =新PARTENTHONE(); List parList=新列表(); 站点站点=新站点(); 软件sw=新软件(); List swList=新列表(); 零售商=“零售商”; site.Id=“1234”; site.Sitename=“Microsoft”; site.Website=“www.microsoft.com”; PARIST = PARLIST; sw.Name=“Visual Studio”; sw.Year=DateTime.Year; swList.Add(sw); site.Products=swList; parList.Add(站点); MemoryStream stream1=新的MemoryStream(); DataContractJsonSerializer ser=新的DataContractJsonSerializer(typeof(Parent)); ser.WriteObject(stream1,第1段); 1.位置=0; StreamReader sr=新的StreamReader(stream1); 控制台写入线(op);
我需要做的是生成Json(数据来自数据库,但目前我已经硬编码了值)并将其发布到第三方服务,但我无法将Json设置为我需要的格式?我怎样才能做到这一点呢?

对于像这样的东西,我喜欢将json转换为类的站点,这样您就可以确切地知道您在使用什么了

举个例子,我和一个小谷歌fu得到了这些类

public class Site
{
    public string id { get; set; }
    public string Sitename { get; set; }
    public string website { get; set; }
}

public class Product
{
    public string Name { get; set; }
    public string Year { get; set; }
}

public class RootObject
{
    public string retailer { get; set; }
    public List<Site> sites { get; set; }
    public List<Product> Products { get; set; }
}
公共类站点
{
公共字符串id{get;set;}
公共字符串Sitename{get;set;}
公共字符串网站{get;set;}
}
公共类产品
{
公共字符串名称{get;set;}
公共字符串年份{get;set;}
}
公共类根对象
{
公共字符串{get;set;}
公共列表站点{get;set;}
公共列表产品{get;set;}
}

现在,您应该能够在RootObject中设置数据并正确地序列化它。

对于类似的内容,我喜欢将json转换为类的站点,这样您就可以确切地知道您使用的是什么

举个例子,我和一个小谷歌fu得到了这些类

public class Site
{
    public string id { get; set; }
    public string Sitename { get; set; }
    public string website { get; set; }
}

public class Product
{
    public string Name { get; set; }
    public string Year { get; set; }
}

public class RootObject
{
    public string retailer { get; set; }
    public List<Site> sites { get; set; }
    public List<Product> Products { get; set; }
}
公共类站点
{
公共字符串id{get;set;}
公共字符串Sitename{get;set;}
公共字符串网站{get;set;}
}
公共类产品
{
公共字符串名称{get;set;}
公共字符串年份{get;set;}
}
公共类根对象
{
公共字符串{get;set;}
公共列表站点{get;set;}
公共列表产品{get;set;}
}

您现在应该能够在RootObject中设置数据并正确地序列化它。

创建这样的类

public class Site
{
    public string id { get; set; }
    public string Sitename { get; set; }
    public string website { get; set; }
}

public class Product
{
    public string Name { get; set; }
    public string Year { get; set; }
}

public class Example
{
    public string retailer { get; set; }
    public List<Site> sites { get; set; }
    public List<Product> Products { get; set; }
}
Example par = new Example();
List<Site> parList = new List<Site>();
Site site = new Site();
Product sw = new Product();
List<Product> swList = new List<Product>();
par.retailer = "The retailer";
site.id = "1234";
site.Sitename = "Microsoft";
site.website = "www.microsoft.com";
par.sites = parList;
sw.Name = "Visual Studio";
sw.Year = DateTime.Now.Year.ToString();
swList.Add(sw);
par.Products = swList;
parList.Add(site);  
这就是
ser
的外观


创建这样的类

public class Site
{
    public string id { get; set; }
    public string Sitename { get; set; }
    public string website { get; set; }
}

public class Product
{
    public string Name { get; set; }
    public string Year { get; set; }
}

public class Example
{
    public string retailer { get; set; }
    public List<Site> sites { get; set; }
    public List<Product> Products { get; set; }
}
Example par = new Example();
List<Site> parList = new List<Site>();
Site site = new Site();
Product sw = new Product();
List<Product> swList = new List<Product>();
par.retailer = "The retailer";
site.id = "1234";
site.Sitename = "Microsoft";
site.website = "www.microsoft.com";
par.sites = parList;
sw.Name = "Visual Studio";
sw.Year = DateTime.Now.Year.ToString();
swList.Add(sw);
par.Products = swList;
parList.Add(site);  
这就是
ser
的外观


只是不要使用
DataContractJsonSerializer
。它是在Json标准结晶之前创建的。每个人和ASP.NET Web API都使用Json.NET。你是不是建议用这个来代替@Computer耶,序列化所有东西!它更好、更简单。只是不要使用
DataContractJsonSerializer
。它是在Json标准结晶之前创建的。每个人和ASP.NET Web API都使用Json.NET。你是不是建议用这个来代替@Computer耶,序列化所有东西!它更好更容易。这是我已经拥有的。我不太确定你的建议我应该改变什么,因为我已经有了这些类的实例/列表,但是Json是不正确的?从我可以看到你的类肯定是错误的,你的设置站点。Products=swList;从json来看,站点没有产品,根对象本身——在您的例子中,父对象应该直接保存产品。我读过的文档声明了RootObject:retailer-companyname,sites-array包含您的站点名称,但没有提到产品。您是如何确定我需要将属性列表放在这里的?我是Json新手,但任何指针都很好。一旦我得到你的回复,我会将此标记为答案:-)好东西,我过去在映射json时遇到过很大的困难,一年后我再次回到它时,我有了一个清晰的时刻,忽略文档和手动混乱,如果你提供了一个示例,你可以在任何网站上重复它,例如,这以c#class的形式吐出json,这样你就可以准确地看到你在处理什么,没有混乱,没有麻烦。这就是我已经拥有的。我不太确定你的建议我应该改变什么,因为我已经有了这些类的实例/列表,但是Json是不正确的?从我可以看到你的类肯定是错误的,你的设置站点。Products=swList;从json来看,站点没有产品,根对象本身——在您的例子中,父对象应该直接保存产品。我读过的文档声明了RootObject:retailer-companyname,sites-array包含您的站点名称,但没有提到产品。您是如何确定我需要将属性列表放在这里的?我是Json新手,但任何指针都很好。一旦我得到你的回复,我会将此标记为答案:-)好东西,我过去在映射json时遇到过很大的困难,一年后我再次回到它时,我有了一个清晰的时刻,忽略文档和手动混乱,如果你提供了一个示例,你可以在任何网站上重复它,例如,这将以c#类的形式显示json,这样您就可以准确地看到它在处理什么,没有混乱,没有麻烦。