Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 - Fatal编程技术网

C# 仅通过显示特定字段格式化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

我试图弄明白如何从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; }
    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);