C# 以正确的格式生成Json
我正在尝试生成以下JsonC# 以正确的格式生成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" }] }
{
"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,这样您就可以准确地看到它在处理什么,没有混乱,没有麻烦。