在Newtonsoft.Json库中获取Raw json字符串

dsc*_*bak 12 .net json json.net

我有这样的json

{
    "name": "somenameofevent",
    "type": "event",
    "data": {
        "object": {
            "age": "18",
            "petName": "18"
        },
        "desct": {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有2个像这样的对象

public class CustEvent
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("type")]
    public string EventType{ get; set; }
    [JsonProperty("data")]
    public SomeData Data{ get; set; }
}

public class SomeData
{
    [JsonProperty("object")]
    public String SomeObject { get; set;}
    [JsonProperty("dsct")]
    public String SomeDesct { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我用来解析json对象Newtonsoft.NET库.以及如何将RAW JSON转换为SomeObject,SomeDesct属性?在JSON中,"data.object ..."是复杂的对象,我想只获得RAW JSON String到这些属性.你能帮助我吗 ?

cha*_*rit 19

您不需要编写任何转换器,只需使用以下JRaw类型:

public class SomeData
{
    [JsonProperty("object")]
    public JRaw SomeObject { get; set;}
    [JsonProperty("dsct")]
    public JRaw SomeDesct { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过检查.Value属性来访问原始值:

var rawJsonDesct = (string)data.SomeDesct.Value;
Run Code Online (Sandbox Code Playgroud)

如果要保留string签名,只需将JSON序列化为隐藏属性,并在访问者调用中进行字符串转换.


fer*_*ero 5

您必须编写一个自定义转换器类(从派生Newtonsoft.Json.JsonConverter),该类指示反序列化器读取整个对象并返回该对象的JSON字符串。

然后,您必须使用JsonConverter属性装饰属性。

[JsonConverter(typeof(YourCustomConverterClass))]
public string SomeObject { get; set; }
Run Code Online (Sandbox Code Playgroud)

网上有很多很好的教程,介绍如何创建自定义转换器,但是-为您方便起见,转换器的核心可能如下所示:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
    return JObject.Load(reader).ToString();
}
Run Code Online (Sandbox Code Playgroud)

此方法读取完整的JSON对象,但以字符串形式返回对象的序列化版本。这会产生一些开销,因为将对象反序列化为a JObject,然后再次进行序列化,但是对我来说,这是最简单的方法。也许您有一个更好的主意。