Creating a Merkle DAG node in Kubo

Based on the return value of the dag get operation in Kubo, a Merkle DAG node seems like it’s just an IPLD map with keys “Data” consisting of an application-specific payload and “Links” consisting of an array of links, following this protobuf.

Given this, I thought using Kubo’s dag put operation would allow me to create a Merkle DAG node with my own payload instead of one with a Unixfs payload.

However, the node I create with dag put behaves differently from the one that is created with files mkdir and another operations that operate with unixfs. Below is the dag-json representation of one of the Unixfs nodes I have, which I got through dag get <cid> after getting the CID from files stat /.

{
    "Data": {
        "/": {
            "bytes": "CAE"
        }
    },
    "Links": [
        {
            "Hash": {
                "/": "QmRQo6kz5QvqiBgXRMCasDzjDYqWfspnUoTZRRwW3ByHGj"
            },
            "Name": "test3.txt",
            "Tsize": 22
        },
        {
            "Hash": {
                "/": "QmcJanXS6E7EXdFfwKcnHizRCzdutcf5oBVqQh57tvSXwv"
            },
            "Name": "test6.txt",
            "Tsize": 22
        }
    ]
}

Let CID1 be a CID for this node. When I run ipfs dag get CID1/Links, I get an error stating that there is no such link named “Links”. However if I copy this dag-json and run it through dag put to get CID2, and then run ipfs dag get CID2/Links, I get the list of links returned. So it appears to me that there is a difference between the DAG nodes that Unixfs operations create over the ones that the dag operations create.

Is someone able to explain this difference? How can I manually create my own Merkle DAG node with a custom “Data” payload that behaves more similarly to the ones that Unixfs creates?