C# 为第三方库类(newtonsoft)的属性实现自定义Json序列化程序

C# 为第三方库类(newtonsoft)的属性实现自定义Json序列化程序,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我正在使用newtonsoft JSON.NET库序列化第三方库的一个对象,我无法修改它。此对象的某些属性序列化为空字符串,尽管它们具有值。因此,我想调用ToString来获取并序列化特定类型属性的值 namespace ThirdParty.Lib { public class Info { // When newtonsoft serialize a property of this type (CDataField) // a get an

我正在使用newtonsoft JSON.NET库序列化第三方库的一个对象,我无法修改它。此对象的某些属性序列化为空字符串,尽管它们具有值。因此,我想调用ToString来获取并序列化特定类型属性的值

namespace ThirdParty.Lib
{
    public class Info 
    {
       // When newtonsoft serialize a property of this type (CDataField) 
       // a get an empty string as value.
       public CDataField Name { get; set; }
       public CDataField Email { get; set; }
       public string IdNNumber {get; set;}
    }
}

看看这个答案,它可能会帮助你

还是在这里

最简单的方法是实现一个克隆类并将其序列化。比如:

namespace MyNameSpace
{
    public class Info 
    {
        // When newtonsoft serialize a property of this type (CDataField) 
        // a get an empty string as value.
        public string Name { get; set; }
        public string Email { get; set; }
        public string IdNNumber {get; set;}

        Info(ThirdiParty.Lib.Info info)
        {
            Name = info.Name.ToString();
            Email = info.Email.ToString();
            IdNumber = info.IdNumber;
        }
    }
 }

var myinfo = new MyNameSpace.Info(
    new ThirdiParty.Lib.Info()
    {
        IdNumber = "001254810",
        Name = "John Doe",
        Email = "johndoe@gmail.com"
    }
);

您的问题是什么?如何使用JSON.NET实现自定义序列化程序,以调用CDATA字段中特定属性的ToString方法?我看不到实现自定义转换器的任何努力。你试过了吗?是的,我试过使用大卫建议的方法。这种方法的问题是WriteJson方法对每个属性都有调用,但是在我想要序列化的对象中,我有其他复杂的对象,我不想为这些对象编写逻辑,因为它们可以很好地序列化。
//json string output
{ IdNumber: "001254810", Name: "", Email: "" }
namespace MyNameSpace
{
    public class Info 
    {
        // When newtonsoft serialize a property of this type (CDataField) 
        // a get an empty string as value.
        public string Name { get; set; }
        public string Email { get; set; }
        public string IdNNumber {get; set;}

        Info(ThirdiParty.Lib.Info info)
        {
            Name = info.Name.ToString();
            Email = info.Email.ToString();
            IdNumber = info.IdNumber;
        }
    }
 }

var myinfo = new MyNameSpace.Info(
    new ThirdiParty.Lib.Info()
    {
        IdNumber = "001254810",
        Name = "John Doe",
        Email = "johndoe@gmail.com"
    }
);