繁体   English   中英

在C#json对象序列化和数据协定中包装原始类型

[英]Wrap primitive type in C# json object serialization and data contract

我试图在可序列化的类中强烈键入一个字符串值,但是我很难弄清楚该怎么做。

下面是一个示例,其中SomeValue实际上只是一个字符串值,但我尝试强力键入是为了防止与同一类中的其他字段混淆/编码错误。

[JsonObject(MemberSerialization.OptIn)]
[DataContract]
public class SomeObject
{
    [DataMember, JsonProperty("some_value")]
    public WrappedString SomeValue { get; set; }
}

WrappedString类如下所示:

public class WrappedString
{
    public readonly string Value;

    public WrappedString(string value)
    {
        Value = value;
    }
}

关于如何包装原始类型和注释类的想法,应该使用构造函数反序列化对象吗?

您可以编写一个自定义的JsonConverter

var json = @"{""SomeValue"":""x"",""SomeStringValue"":""y""}";
var obj = JsonConvert.DeserializeObject<SomeObject>(json);

public class MyConverter : JsonConverter
{

    public override bool CanConvert(Type objectType)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return new WrappedString((string)reader.Value);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

public class SomeObject
{
    [JsonConverter(typeof(MyConverter))]
    public WrappedString SomeValue { get; set; }
    public string SomeStringValue { get; set; }
}

public class WrappedString
{
    public readonly string Value;

    public WrappedString(string value)
    {
        Value = value;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM