C# 仅通过显示特定字段格式化JSON输出
我试图弄明白如何从API生成JSON格式的输出。 我定义了以下类:C# 仅通过显示特定字段格式化JSON输出,c#,json,C#,Json,我试图弄明白如何从API生成JSON格式的输出。 我定义了以下类: public class MetaData { public string code { get; set; } public string message { get; set; } } public class TSep { public string noSep { get; set; } public string noKartu { get; set; } pub
public class MetaData
{
public string code { get; set; }
public string message { get; set; }
}
public class TSep
{
public string noSep { get; set; }
public string noKartu { get; set; }
public string tglSep { get; set; }
public Peserta peserta { get; set; }
public string tglPulang { get; set; }
public string ppkPelayanan { get; set; }
public string jnsPelayanan { get; set; }
public string klsRawat { get; set; }
public string noMR { get; set; }
public Rujukan rujukan { get; set; }
public string catatan { get; set; }
public string keterangan { get; set; }
public string diagAwal { get; set; }
public string diagnosa { get; set; }
public Poli poli { get; set; }
public Cob cob { get; set; }
public Katarak katarak { get; set; }
public Jaminan jaminan { get; set; }
public Skdp skdp { get; set; }
public string noTelp { get; set; }
public string user { get; set; }
}
public class ResponseSEP
{
public MetaData metadata;
public TSep response;
}
我还创建了控制器以生成JSON输出,如下所示:
public ResponseSEP Get(string id)
{
ResponseSEP oSep = new ResponseSEP();
MetaData oMetaData = new MetaData();
oMetaData.code = "200";
oMetaData.message = "sukses";
oSep.metadata = oMetaData;
TSep response = new TSep() ;
response.catatan = "test";
response.diagnosa = "Cholera";
response.jnsPelayanan = "Rawat Inap";
response.noSep = id;
Rujukan rujukan = new Rujukan();
rujukan.noRujukan = "Rujukan" + id;
response.rujukan = rujukan;
oSep.response = response;
return oSep;
}
当我执行api:,我得到以下输出:
{
"metadata":{"code":"200","message":"sukses"},
"response":
{
"noSep":"1234123",
"noKartu":null,
"tglSep":null,
"peserta":null,
"tglPulang":null,
"ppkPelayanan":null,
"jnsPelayanan":"Rawat Inap",
"klsRawat":null,
"noMR":null,
"rujukan":
{
"asalRujukan":null,
"tglRujukan":null,
"noRujukan":"Rujukan1234123",
"ppkRujukan":null
},
"catatan":"test",
"keterangan":null,
"diagAwal":null,
"diagnosa":"Cholera",
"poli":null,
"cob":null,
"katarak":null,
"jaminan":null,
"skdp":null,
"noTelp":null,
"user":null
}
}
我只想为某些列生成JSON输出,而不是类TSep中的所有列,如下所示
{
"metadata":{"code":"200","message":"sukses"},
"response":
{
"noSep":"1234123",
"noKartu":null,
"tglSep":null,
"peserta":null,
"tglPulang":null,
"jnsPelayanan":"Rawat Inap",
"klsRawat":null,
"noMR":null,
"rujukan":
{
"asalRujukan":null,
"tglRujukan":null,
"noRujukan":"Rujukan1234123",
"ppkRujukan":null
}
}
}
有没有办法做到这一点?
感谢您的帮助。您可以在序列化时使用属性忽略属性。比如说,
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public int Age{get;set;}
}
另一个属性可以是。范例
在任何一种情况下,年龄属性都将被忽略
更新-基于评论
根据注释,如果它为空,您只需要忽略它。你可以用它来达到这个目的。例如,如果student是要序列化的对象
var json = JsonConvert.SerializeObject(student,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings {
NullValueHandling = NullValueHandling.Ignore
});
学生被定义为
var student = new Student
{
Id = 1,
Name = "John",
Age = 35
};
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age{get;set;}
}
一般来说,这里有3个选项。首先,您可以动态定义匿名对象,并仅用所需字段填充它,然后序列化此匿名对象
var requestedDataOnly = new { Metadata = oMetaData, someAnotherField = 10 };
var json = JsonConvert.SerializeObject(requestedDataOnly);
它将生成一个JSON,其中只定义了此对象中的字段
第二个选项是定义一个只包含所需字段的附加DTO类。
您可以使用诸如生成DTO之类的服务
public class Metadata
{
public string code { get; set; }
public string message { get; set; }
}
public class Rujukan
{
public object asalRujukan { get; set; }
public object tglRujukan { get; set; }
public string noRujukan { get; set; }
public object ppkRujukan { get; set; }}
public class Response
{
public string noSep { get; set; }
public object noKartu { get; set; }
public object tglSep { get; set; }
public object peserta { get; set; }
public object tglPulang { get; set; }
public string jnsPelayanan { get; set; }
public object klsRawat { get; set; }
public object noMR { get; set; }
public Rujukan rujukan { get; set; }
}
public class RootObject
{
public Metadata metadata { get; set; }
public Response response { get; set; }
}
var rootObject = new RootObject();
var json = JsonConvert.SerializeObject(rootObject);
它允许您将DTO对象存储为单独的模型,并且可以在代码库中的不同位置重用它
第三个选项是使用
[JsonIgnore]
属性,请参阅此问题的另一个答案。它是每次忽略还是仅在值为null时忽略?是否仅在值为null时忽略??或者每次?对于我的情况,当值为空时,我需要忽略。我已经根据您的评论更新了答案。请检查它是否有助于解决问题修改类将影响使用该类的所有输出。我只想格式化某个函数上的Json输出。而且,在某个函数中,输出可能会显示具有null值的列,因此我不会限制具有null值的列的输出。好的,我猜匿名动态方法更相关。我要试一试。谢谢,谢谢。
public class Metadata
{
public string code { get; set; }
public string message { get; set; }
}
public class Rujukan
{
public object asalRujukan { get; set; }
public object tglRujukan { get; set; }
public string noRujukan { get; set; }
public object ppkRujukan { get; set; }}
public class Response
{
public string noSep { get; set; }
public object noKartu { get; set; }
public object tglSep { get; set; }
public object peserta { get; set; }
public object tglPulang { get; set; }
public string jnsPelayanan { get; set; }
public object klsRawat { get; set; }
public object noMR { get; set; }
public Rujukan rujukan { get; set; }
}
public class RootObject
{
public Metadata metadata { get; set; }
public Response response { get; set; }
}
var rootObject = new RootObject();
var json = JsonConvert.SerializeObject(rootObject);